LINQ表达式-相同的值不超过两次

本文关键字:两次 不超过 表达式 LINQ | 更新日期: 2023-09-27 18:05:36

我有一个提取的列表,其中只包含相加大于80的数字,并且还过滤为10个随机数。

如何确保相同的值不会在4个数字的列表中出现两次以上?

所以{ 20, 20, 20, 5 }不正常,但{ 20, 5, 20, 3 }可以。

我试过使用Distinct,但似乎它确保整个列表是唯一的,而不是我需要的。

var numList = new List<int> { 5, 20, 1, 7, 19, 3, 15, 60, 3, 21, 57, 9 };
var extractedList = (from n1 in numList
                     from n2 in numList
                     from n3 in numList
                     from n4 in numList
                     where n1 + n2 + n3 + n4 > 80
                     select new { n1, n2, n3, n4, Rnd = rnd.NextDouble() })
                     .OrderBy(z => z.Rnd)
                     .Take(10)
                     .ToList();

LINQ表达式-相同的值不超过两次

您可以为选中的值创建一个数组,对它们进行分组,并检查每个组的成员不超过两个。

例如:

    var extractedList = (from n1 in numList
                         from n2 in numList
                         from n3 in numList
                         from n4 in numList
                         where n1 + n2 + n3 + n4 > 80 && 
                             new int[]{n1, n2, n3, n4}
                                 .GroupBy(x => x)
                                 .Max(g => g.Count()) <= 2 
                         select new { n1, n2, n3, n4, Rnd = rnd.NextDouble() })
                         .OrderBy(z => z.Rnd)
                         .Take(10)
                         .ToList();