我有一个包含N个项目的IEmunerable列表,例如:23,1,38 .....
当循环通过列表时,所需的逻辑是:
1:查找是否存在
2:如果存在1,找到2
3:如果存在2,找到3
4:如果存在3,则从当前列表中删除3。
我目前的做法是:
foreach(var x in someIntList)
{
if(x==1)
{
if(someIntList.Any(y => y==2))
{
if(someIntList.Any(z => z==3))
{
//This is the shortest code i can think of, but apparently its wrong. Error saying there is no Except method for IEmunerable<Int> ?
someIntList = someIntList.Except(3);
}
}
}
}
答案 0 :(得分:2)
您需要将IEnumerable<int>
传递给除此之外的
someIntList = someIntList.Except(new[] {3});
详细了解MSDN
以外的其他内容为了更好地利用这个,我无法想象更短的版本:
if(someIntList.Contains(1)&&someIntList.Contains(2)&&someIntList.Contains(3))
{
someIntList.Remove(3); // **if it's a list**
someIntList = someIntList.Except(3); //**if it's a IEnumerable**
}
答案 1 :(得分:2)
片段
var x = new List<int> {5, 4, 3, 2, 1};
if(x.Contains(1) && x.Contains(2) && x.Contains(3)) x.Remove(3);
以防万一...
IEnumerable<int> y = new List<int> {5,4,3,2,1};
所以如果你从你的方法中获得IEnumerable。
var x = y.ToList()
如果你需要删除所有,x.RemoveAll(z =&gt; z == 3);
答案 2 :(得分:1)
目前尚不清楚为什么要开始循环,或使用Any
代替Contains
:
if (someIntList.Contains(1) && someIntList.Contains(2) && someIntList.Contains(3))
{
someIntList = someIntList.Where(x => x != 3); // Possibly with ToList()?
}
您可能不想要使用Except
,因为这是一个基于集合的操作 - 如果您的原始列表包含重复项,那么如果您使用Except
,它们将被删除
请注意,这将删除所有 3次出现 - 是您想要的,还是只想删除第一次 3次出现?