有没有内置功能呢? 假设我有列表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
答案 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++;
}
}
}