c# 迭代地删除项目并将其直接添加到列表中?
c# iteratively removing and adding items directly to a List?
我在这里搜索了很多关于如何使用列表的 .remove 和 .removeAll 扩展名的例子。在尝试完成这项工作时,我似乎无法让 .removeAll 以我想要的方式实际从列表中删除项目。它所做的是为列表中的每个值保留一份副本。
循环遍历 'k.' 描述的一组值 我想要的是如果 'k' 的值已经在列表中,我想将其从列表中完全删除。如果遇到 'k' 的值不在列表中,我想添加它。
for(double k=Low[0]; k<=High[0]; k +=TickSize)
{
if(LiTZ.Contains(k) ) { //if k is in list
LiTZ.RemoveAll(item => item == k); //remove it
}
else {
LiTZ.Add(k); //if k not in list, add it
}
}
我也考虑过创建一个单独的列表,并在第一个 'if' 语句中添加到该列表,然后比较并以某种方式从第一个列表中删除项目,如下所示:
for(double k=Low[0]; k<=High[0]; k +=TickSize)
{
if(LiTZ.Contains(k) ) { //if k is in list
LiRemovalList.Add(k); //List of items to remove later
}
else {
LiTZ.Add(k); //if k not in list, add it
}
}
//Code to compare and remove items in LiRemovalList from LiTZ
是否可以按照我正在尝试的方式直接在列表上迭代,而无需创建其他列表?
不是。您不能在使用 foreach 循环或上升 for 循环迭代集合时更改集合,因为枚举操作将在您删除项目后失败。
您可以像这样使用向后循环删除项目:
for (int i = LiTZ.Count - 1; i >= 0; i--) {
if (LiTZ[i] == something) {
LiTZ.RemoveAt(i);
}
}
但这里对您来说最好的选择可能是创建一个新列表。
我在这里搜索了很多关于如何使用列表的 .remove 和 .removeAll 扩展名的例子。在尝试完成这项工作时,我似乎无法让 .removeAll 以我想要的方式实际从列表中删除项目。它所做的是为列表中的每个值保留一份副本。
循环遍历 'k.' 描述的一组值 我想要的是如果 'k' 的值已经在列表中,我想将其从列表中完全删除。如果遇到 'k' 的值不在列表中,我想添加它。
for(double k=Low[0]; k<=High[0]; k +=TickSize)
{
if(LiTZ.Contains(k) ) { //if k is in list
LiTZ.RemoveAll(item => item == k); //remove it
}
else {
LiTZ.Add(k); //if k not in list, add it
}
}
我也考虑过创建一个单独的列表,并在第一个 'if' 语句中添加到该列表,然后比较并以某种方式从第一个列表中删除项目,如下所示:
for(double k=Low[0]; k<=High[0]; k +=TickSize)
{
if(LiTZ.Contains(k) ) { //if k is in list
LiRemovalList.Add(k); //List of items to remove later
}
else {
LiTZ.Add(k); //if k not in list, add it
}
}
//Code to compare and remove items in LiRemovalList from LiTZ
是否可以按照我正在尝试的方式直接在列表上迭代,而无需创建其他列表?
不是。您不能在使用 foreach 循环或上升 for 循环迭代集合时更改集合,因为枚举操作将在您删除项目后失败。
您可以像这样使用向后循环删除项目:
for (int i = LiTZ.Count - 1; i >= 0; i--) {
if (LiTZ[i] == something) {
LiTZ.RemoveAt(i);
}
}
但这里对您来说最好的选择可能是创建一个新列表。