首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用LINQ对序列中的相同值进行分组?

如何使用LINQ对序列中的相同值进行分组?
EN

Stack Overflow用户
提问于 2012-05-26 20:07:02
回答 4查看 876关注 0票数 4

我有一个序列。例如:

代码语言:javascript
运行
复制
new [] { 10, 1, 1, 5, 25, 45, 45, 45, 40, 100, 1, 1, 2, 2, 3 }

现在我必须在不改变整体顺序的情况下删除重复的值。对于上面的序列:

代码语言:javascript
运行
复制
new [] { 10, 1, 5, 25, 45, 40, 100, 1, 2, 3 }

如何使用LINQ做到这一点?

EN

Stack Overflow用户

发布于 2012-05-26 20:15:35

使用LINQ解决这个问题在技术上可能是可行的(尽管我不认为你可以使用一行程序),但我认为自己编写它会更优雅。

代码语言:javascript
运行
复制
public static class ExtensionMethods
{
    public static IEnumerable<T> PackGroups<T>(this IEnumerable<T> e)
    {
        T lastItem = default(T);
        bool first = true;
        foreach(T item in e)
        {
            if (!first && EqualityComparer<T>.Default.Equals(item, lastItem))
                continue;
            first = false;
            yield return item;
            lastItem = item;
        }
    }
}

你可以这样使用它:

代码语言:javascript
运行
复制
int[] packed = myArray.PackGroups().ToArray();

这个问题并不清楚在1,1,2,3,3,1的情况下应该返回什么。大多数给出的答案返回1,2,3,而我的答案返回1,2,3,1

票数 1
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10766072

复制
相关文章

相似问题

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