我有一个提取的列表,其中仅包含相加大于 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();
最佳答案
您可以创建所选值的数组,将它们分组,并检查每个组的成员是否超过两个。
例如:
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();
关于c# - LINQ 表达式 - 相同值不超过两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23892289/