C#从Collection(1,2,1,2,3)中删除集合(1,2)。预期结果是:(1,2,3)

时间:2015-11-25 02:53:46

标签: c#

有没有内置功能呢? 假设我有列表A列表{1,2,2,3,4}和列表B列表{2,3}。和一个函数List NoName(A,B)。我预计NoName的返回值是{1,2,4}。我想函数Except可以做到这一点,但不是。 我无法找到解释我问题的任何词语。但我可以用伪代码来解释。

foreach(item in B)
{
    A.RemoveAt(A.IndexOf(item))
}

return A

1 个答案:

答案 0 :(得分:0)

从您的问题和评论中,我认为您想要与Enumerable.Except类似的内容,但仅适用于该子集的首次出现。

一个不明确的事情是:如果B不是A的子集怎么办?什么是{1,2,3} - {3,5}的结果?

显然没有内置功能来实现这一目标。

static IEnumerable<int> RemoveFirstSubset(int[] super, int[] sub)
{
    //omitted code to check parameters

    var index = 0;
    var found = false;

    while (index < super.Length)
    {
        if (!found && super.Skip(index).Take(sub.Length).SequenceEqual(sub))
        {
            found = true;
            index += sub.Length;
        }
        else
        {
            yield return super[index];
            index++;
        }
    }
}