c# - 当项目相等时从可枚举源中删除单个项目

标签 c# linq ienumerable

假设我有一个可枚举的来源,它看起来像这样:

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/

相关文章:

c# - 使用另一个列表中的详细信息填充大量对象列表

c# - Linq,使用 ToLookup 将值投影到不同的命名变量

c# - 此代码返回不同的值。但是,我想要的是返回一个强类型集合而不是匿名类型

.net - 将 IEnumerable 转换为列表

c# - 控制声音线路输入

c# - 在 LINQ 中左加入 OrderBy

c# - 如何使用 Roslyn 代码诊断识别和分析局部变量和参数?

c# - 从 Amazon s3 流中读取文本

c# - 将类型 T 的数组转换为类型 I 的数组,其中 T 在 C# 中实现 I

c# - 将 IEnumerable 列表传递给 Controller