【发布时间】:2018-04-05 06:56:19
【问题描述】:
我进行的每个搜索都假定“Distinct()”,但这不是我的要求。我只想删除所有重复。是否有任何使用 linq 的选项(即 Enumerable 扩展)?
例如(在 C# 中)
int[] input = new [] {1,2,3,3,4,5,5,5,6,6,5,4,4,3,2,1,6};
int[] expected = new [] {1,2,3,4,5,6,5,4,3,2,1,6};
【问题讨论】:
-
所以你只想删除相同的连续数字?那么一个普通的 for 循环会比 linq 快
-
嗯。没有。 Linq 适用于集合/列表。因此,要执行您想要的操作,您需要首先将您的集合分成许多集合 - 在您选择的任何边界处,然后您可以使用 linq 删除每个较小集合中的重复项..然后重新组合。
-
LINQ 类似于 SQL,而不是 shell 命令。您也不是在询问 unique 条目,而是在询问非重复条目。有很多方法可以做到这一点,例如通过对项目本身进行分组,或者创建一个仅在第一次遇到项目时产生的迭代器
-
顺便说一句,你为什么要这个?可能有更好的选择,例如 ReactiveX 更擅长处理事件序列,并且已经包含用于去抖动、窗口等操作。它已经有一个 DistinctUntilChanged LINQ 操作符
-
我建议从
GroupAdjacent- github.com/morelinq/MoreLINQ#groupadjacent开始
标签: c# linq ienumerable uniq