如何在向列表对象添加值时中断循环,该值不同于列表的已添加值

本文关键字:添加 列表 不同于 循环 对象 中断 | 更新日期: 2023-09-27 18:31:29

我有一个包含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),那么我想从循环中中断。

例如:现在在我的列表中添加 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

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

如何在向列表对象添加值时中断循环,该值不同于列表的已添加值

我只想在列表对象中添加重复的值,直到找到不同的 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);
}
  • 您可以使用foreach循环访问ids元素
  • break的工作方式与
  • foreachfor中一样
  • 如果我们不中断,则做任何您想做的事情,例如,将值添加到list
  • Contains检查list是否已经包含id
    • 这使得它大致是一个 O(n^2) 操作 - 因为 foreachContains 都迭代列表的元素

法典:

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

您可以使用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

下面是

所需的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();