假设我有一个可枚举的来源,它看起来像这样:
IEnumerable<string> source = new [] { "first", "first", "first", "second" };
我希望能够构建一个将返回以下内容的 LINQ 语句:
"first", "first", "second"
注意只有一个第一次消失了。我不在乎是哪一个,因为在我的例子中,所有 3 个“第一”都被认为是相等的。我试过 source.Except(new [] { "first"})
但这会删除所有实例。
最佳答案
source
.GroupBy(s => s)
.SelectMany(g => g.Skip(1).DefaultIfEmpty(g.First()))
对于每个组,跳过组的第一个元素并返回其余元素 - 除非不会返回任何元素...在这种情况下,返回组的第一个元素。
source
.GroupBy(s => s)
.SelectMany(g => g.Take(1).Concat(g.Skip(2)))
对于每个组,获取第一个元素,然后从第三个元素开始获取 - 始终跳过第二个元素。
关于c# - 当项目相等时从可枚举源中删除单个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10710081/