I have an extracted list which contains only numbers whose addition is greater than 80 and also filtered to 10 random numbers.
How to ensure that the same value does not occur more than twice in the list of 4 numbers?
So { 20, 20, 20, 5 }
would not be ok but { 20, 5, 20, 3 }
would be fine.
I've tried using Distinct
but it seems it ensure that the entire list is unique, not what I need.
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();
You could create an array of the selected values, group them, and check that each group has no more than two members.
For example:
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();
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.