首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有唯一键和值的组数据

具有唯一键和值的组数据
EN

Stack Overflow用户
提问于 2017-11-06 13:02:19
回答 2查看 247关注 0票数 6

我有以下一组数字:

代码语言:javascript
复制
1  137
1  143
11 37
11 46
11 132
46 65
46 139
69 90

现在,我需要将数据按第一个值分组,在组值中不存在组键。因此,例如,如果我简单地分组数据,我就会得到以下结果:

代码语言:javascript
复制
1  137
   143
11 37
   46
   132
46 65
   139
69 90

46这里是第三组中的组密钥和第二组中的组值。在这种情况下,我需要将第三个组的组值合并到第二个组中,然后删除第三个组。分组的最终结果应该如下所示:

代码语言:javascript
复制
1  137
   143
11 37
   46
   132
   65
   139
69 90

我对C#比较陌生,所以我想知道是否有一种使用LINQ的奇特方法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-06 14:03:50

试试这个LINQ解决方案:

代码语言:javascript
复制
var numbers = new List<Number>
{
    new Number {X = 1, Y = 137},
    new Number {X = 1, Y = 143},
    new Number {X = 11, Y = 37},
    new Number {X = 11, Y = 46},
    new Number {X = 11, Y = 132},
    new Number {X = 46, Y = 65},
    new Number {X = 46, Y = 139},
    new Number {X = 69, Y = 90}
};
var result = numbers.GroupBy(c => c.X);
var result2 = numbers.FirstOrDefault(c => result.Select(d => d.Key).Contains(c.Y));

var finalResult = numbers.Where(x => x.X == result2?.Y)
                         .Select(x =>  { x.X = result2.X;x.Y = x.Y; return x; } )
                         .Union(numbers.Where(c => c.X != result2?.Y)).GroupBy(c => c.X ,
                         (key, element) => new
                         {
                             Key = key,
                            Element = element.Select(c => c.Y).ToList()
                         });

结果:

票数 1
EN

Stack Overflow用户

发布于 2017-11-06 13:48:06

这可能对你有用

代码语言:javascript
复制
public static List<Numbers> setNumbers()
{
    List<Numbers> num = new List<Numbers>();

    num.Add(new Numbers() { Column1 = 1, Column2 = 137 });
    num.Add(new Numbers() { Column1 = 1, Column2 = 143 });
    num.Add(new Numbers() { Column1 = 11, Column2 = 37 });
    num.Add(new Numbers() { Column1 = 11, Column2 = 46 });
    num.Add(new Numbers() { Column1 = 11, Column2 = 132 });
    num.Add(new Numbers() { Column1 = 46, Column2 = 65 });
    num.Add(new Numbers() { Column1 = 46, Column2 = 139 });
    num.Add(new Numbers() { Column1 = 69, Column2 = 90 });


    return num;
}


public static void group()
{
    List<Numbers> numbers = setNumbers();

    var grouppedNumbers = numbers
        .GroupBy(x => x.Column1).ToList();

    grouppedNumbers.AddRange(grouppedNumbers.FirstOrDefault(x => x.First().Column1.Equals(46)).Select(s => new Numbers() { Column1 = 11, Column2 = s.Column2 }).GroupBy(g => g.Column1).ToList());
    grouppedNumbers.Remove(grouppedNumbers.FirstOrDefault(x => x.First().Column1.Equals(46)));



    foreach (var groups in grouppedNumbers)
    {
        Console.WriteLine(groups.First().Column1);
       foreach(var i in groups)
       {
           Console.WriteLine(i.Column1+" "+ i.Column2);
       }
    }




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

https://stackoverflow.com/questions/47137632

复制
相关文章

相似问题

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