【问题标题】:Problem with Lists列表问题
【发布时间】:2010-08-02 06:08:36
【问题描述】:

我有一个整数列表

 List<int> LI = new List<int>();

我想检查列表中是否存在特定数字。如果存在则进行数据库更新,否则进行数据库插入

foreach (int IT in LI)
        {

        }

我可以在 foreach 循环中执行此操作,或者如果不可能,如何实现此操作??????

【问题讨论】:

  • 你可能还想为你的变量寻找比 LI 更好的名称,例如 updateList
  • 请不要对局部变量使用全大写。

标签: c# asp.net list


【解决方案1】:

最简单的方法是:

if(LI.Contains(someIntValue))
{
  // do database update
}

它将搜索列表中的每个元素并将其与someIntValue 进行比较,一旦找到匹配的元素返回true,如果没有元素匹配则返回false。

现在,这是低效的,因为搜索列表的时间是线性的。如果您经常搜索您的列表,您可能应该将整数存储在更适合搜索的集合中,例如 DictionaryHashSet,它们都有恒定的时间

【讨论】:

  • 感谢 Alan 的回复。我的列表并不长。它可以包含 20-25 个元素,所以我应该使用什么集合以及字典或 HashSet 在列表上的效率是多少
  • +1 用于提及更适合此问题的数据结构。 Here 你会发现 DictionaryList 的查找时间之间的比较
  • @chamara:如果您使用的是 .NET 3.5 或更高版本,请使用 HashSet,因为它特定于搜索。 Dictionary 是更适合将键与值关联起来的集合。如果您使用的是 .Net 3.0 或更早版本,请使用字典。
  • @Giu:有趣的链接,但它假定为int。在string 上搜索可能会有一些不同的收支平衡点。
【解决方案2】:
public void InsertUpdateNumber(int i){

    if(LI.Any(li => li == i))
        //do update
    else
        //do insert

}

【讨论】:

  • 这个场景有点,但可以扩展到具有相同逻辑的复杂场景,例如:检查员工信息数据列表中是否存在员工和部门组合
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-16
  • 2021-12-29
  • 2011-03-04
  • 2016-05-04
  • 2011-08-25
  • 2011-08-03
  • 1970-01-01
相关资源
最近更新 更多