繁体   English   中英

LINQ联合副本

[英]LINQ Union with duplicates

假设我们有以下三个列表:

{ 1, 2, 2, 3 }
{ 2, 3, 3, 4 }
{ 2, 3, 4, 5, 5, 5 }

然后,如何将以上内容转换为一个列表,使每个项目重复在列表中找到的最大次数。即,

{1, 2, 2 (Found twice in list 1), 3, 3 (Twice in list 2), 4, 5, 5, 5 (Thrice in list 3)}

我可以实现上述直通循环,但是,我正在寻找一种可能已经存在的LINQ方法。

问题类似于python中具有重复项的列表联合

Linq一行

int[][] items = { new[]{ 1, 2, 2, 3 }, new[] { 2, 3, 3, 4 }, new[] { 2, 3, 4, 5, 5, 5 } };
var result = items.SelectMany(x => x.GroupBy(y => y)).GroupBy(x => x.Key).Select(x => x.OrderByDescending(y => y.Count()).First()).SelectMany(x => x);

https://dotnetfiddle.net/kZhseg

干得好:

var xs = new [] { 1, 2, 2, 3 };
var ys = new [] { 2, 3, 3, 4 };
var zs = new [] { 2, 3, 4, 5, 5, 5 };

var result =
    xs
        .ToLookup(x => x)
        .Concat(ys.ToLookup(x => x))
        .Concat(zs.ToLookup(x => x))
        .GroupBy(x => x.Key)
        .Select(x => new { x.Key, count = x.Max(y => y.Count()) })
        .SelectMany(x => Enumerable.Repeat(x.Key, x.count));

它给出您想要的结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM