首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用LINQ删除列表中重复的内容?

使用LINQ删除列表中重复的内容?
EN

Stack Overflow用户
提问于 2017-06-24 19:16:04
回答 4查看 94关注 0票数 2

假设我有这样的列表:

代码语言:javascript
运行
复制
int[] list = { 1, 2, 3, 3, 1 };

我想要的是删除重复的,立即跟随相同的数字。因此,在这种情况下,我想删除3,但不是1。

因此,新的列表应该是:{1, 2, 3, 1}

另一个例子是这个列表:{2, 7, 7, 7, 2, 6, 4},它将变成{2, 7, 2, 6, 4}

我能用LINQ做这个吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-06-24 19:26:35

如果您想使用现有的LINQ方法,可以使用Aggregate,但是这种方法将失去惰性。您可以编写自己的扩展方法:

代码语言:javascript
运行
复制
public static IEnumerable<T> RemoveConsecutiveDuplicates<T>(this IEnumerable<T> source, IEqualityComparer<T> comp = null)
{
    comp = comp ?? EqualityComparer<T>.Default;

    using (var e = source.GetEnumerator())
    {
        if (e.MoveNext())
        {
            T last = e.Current;
            yield return e.Current;

            while (e.MoveNext())
            {
                if (!comp.Equals(e.Current, last))
                {
                    yield return e.Current;
                    last = e.Current;
                }
            }
        }
    }
}
票数 5
EN

Stack Overflow用户

发布于 2017-06-24 19:29:45

如果您坚持使用LINQ进行此操作,则可以使用Aggregate

代码语言:javascript
运行
复制
var result = array.Aggregate(new List<int>(), (a, b) =>
{
    if (!a.Any() || a.Last() != b)
        a.Add(b);
    return a;
});

但这并不一定是最有效的解决方案,因为在每次迭代中都有AnyLast。比较以前的迭代值和当前的迭代值的简单foreach将执行得更好。

票数 3
EN

Stack Overflow用户

发布于 2017-06-24 19:26:13

您可以像这样从PairWise中使用MoreLINQ

代码语言:javascript
运行
复制
var result =
    new[] {list[0]}
        .Concat(
            list
                .Pairwise((x, y) => new {Item = y, Same = x == y})
                .Where(x => !x.Same)
                .Select(x => x.Item))
        .ToArray();

PairWise允许您获得一个序列,该序列的结果是对原始序列中的每个项及其前面的项应用函数(对第一个项的期望)。

我在这里要做的是,对于每一项(期望第一项),我将得到项目本身,并得到一个布尔值(Same),指示该项目是否等于它前面的项。然后,我对序列进行过滤,只获取每个项都不等于前面项的项。然后,我只是简单地将最初列表中的第一项添加到新的序列中。

注意:不要忘记处理list为空的情况。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44740066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档