在向列表对象添加值时,如何从循环中断开,这与已添加的列表值不同?

时间:2016-01-22 07:24:05

标签: c# linq list

我有一个列表对象,其中包含如下所示的int:

var list = new List<int>();
var ids=getting only ids from database.for Eg:1,2,1,3,5,6,3.

现在我要做的是从数据库中取出ID后我想要添加到我的列表对象中,如果添加了任何不同的ID(例如:ids:2),那么我想从循环中断开。

对于Ex :在我的列表中添加1之后,如果我尝试添加2在我的列表对象中不存在,那么我想从我的循环中断开状态,在循环外找到不同的元素。

在列表对象中添加值,直到找到重复值意味着在我的列表对象中仅添加重复值,如果找到不在列表中的非重复值,则在列表中添加1后从循环中断开循环。因为2是不同的,它不在列表对象中。

这是我的代码:

bool status;
for (var i = 0; i < ids.Count; i++)
{
    list.Add(ids);
}
//here i want status with different element found or not

注意:我只想在列表对象中添加重复值,直到找到新的ID。

4 个答案:

答案 0 :(得分:2)

  • 您可以使用foreach来迭代ids
  • 的元素
  • breakforeach中的工作方式与for
  • 的工作方式相同
  • 如果我们不打破,请执行您想做的任何事情,例如,将值添加到list
  • Contains检查list是否已包含id
    • 这大致是O(n ^ 2)操作 - 因为foreachContains遍历列表元素

代码:

foreach (var id in ids)
{
  if (list.Contains(id))
  {
    break;
  }
  list.Add(id);
}

答案 1 :(得分:2)

  

我只想在列表对象中添加重复值,直到找到不同的ID。

var list = new List<int>{ 1, 2, 3, 4};
var idsFromDb = new List<int> {1, 2, 5, 3};

foreach (int id in idsFromDb)
{
    if (list.Contains(id))
    {
        break;
    }
    list.Add(id);
}

答案 2 :(得分:1)

您可以使用Contains

status = false;
for (var i = 0; i < ids.Count; i++)
{
    if (list.Count > 0 && !list.Contains(ids[i])){            
        list.Add(ids[i]); //add this, be it duplicate or not
        status = true; //different element found
        break; //break if this is not duplicate
    } else {
        //do something for duplicate
        list.Add(ids[i]); //add this, be it duplicate or not
    }
}

Contains可以检查您的商品是否已存在于List

答案 3 :(得分:1)

这是您的desired HashSet<T> + LINQ方法:

var dupChecker = new HashSet<int> {ids[0]};  // add first element, now only duplicates are allowed
List<int> dupList = ids.TakeWhile(i => !dupChecker.Add(i)).ToList();