是否有一个linq命令可以过滤掉序列中出现的重复项?
'4'的示例:
Original { 1 2 3 4 4 4 5 6 7 4 4 4 8 9 4 4 4 }
Filtered { 1 2 3 4 5 6 7 4 8 9 4 }
Run Code Online (Sandbox Code Playgroud)
谢谢.
并不是的.我写这个:
public static IEnumerable<T> RemoveDuplicates(this IEnumerable<T> sequence)
{
bool init = false;
T current = default(T);
foreach (var x in sequence)
{
if (!init || !object.Equals(current, x))
yield return x;
current = x;
init = true;
}
}
Run Code Online (Sandbox Code Playgroud)
与 svick 的答案类似,但有副作用以避免缺点和相反:
int[] source = new int[] { 1, 2, 3, 4, 4, 4, 5, 6, 7, 4, 4, 4, 8, 9, 4, 4, 4 };
List<int> result = new List<int> { source.First() };
source.Aggregate((acc, c) =>
{
if (acc != c)
result.Add(c);
return c;
});
Run Code Online (Sandbox Code Playgroud)
编辑:不再需要source.First()按照 mquander 的担忧:
int[] source = new int[] { 1, 2, 3, 4, 4, 4, 5, 6, 7, 4, 4, 4, 8, 9, 4, 4, 4 };
List<int> result = new List<int>();
result.Add(
source.Aggregate((acc, c) =>
{
if (acc != c)
result.Add(acc);
return c;
})
);
Run Code Online (Sandbox Code Playgroud)
我想我还是最喜欢Danny的解决方案。
| 归档时间: |
|
| 查看次数: |
394 次 |
| 最近记录: |