IEnumerable删除int项的最佳实践

时间:2013-12-05 07:25:00

标签: c# linq list

我有一个包含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);

            }

        }

    }   

}

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次出现?