如何在向列表对象添加值时中断循环,该值不同于列表的已添加值
本文关键字:添加 列表 不同于 循环 对象 中断 | 更新日期: 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
元素 foreach
在for
中一样- 如果我们不中断,则做任何您想做的事情,例如,将值添加到
list
-
Contains
检查list
是否已经包含id
。- 这使得它大致是一个 O(n^2) 操作 - 因为
foreach
和Contains
都迭代列表的元素
- 这使得它大致是一个 O(n^2) 操作 - 因为
break
的工作方式与法典:
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();