根据顺序洗牌
本文关键字:顺序 | 更新日期: 2023-09-27 18:09:31
我有一个c#项目列表,需要根据下面的格式洗牌项目。如果可能的话,在Linq查询做同样的?
Input Sample data
**Frouts**
Orange
Orange
Orange
Orange
Mango
Mango
Mango
Mango
Mango
Mango
Apple
Apple
Apple
我需要以下输出
**Frouts**
Orange
Mango
Apple
Orange
Mango
Apple
Orange
Mango
Apple
Orange
Mango
Mango
Mango
这段代码将执行您想要的操作,并给出您指定的输出:
var listOfStrings = new List<string>
{
"Orange",
"Orange",
"Orange",
"Orange",
"Mango",
"Mango",
"Mango",
"Mango",
"Mango",
"Mango",
"Apple",
"Apple",
"Apple"
};
var groupedStrings = listOfStrings.GroupBy(i => i)
.Select(i => new {i.Key, Items = i.ToList()}).ToList();
var maxGroupSize = groupedStrings.OrderByDescending(i => i.Items.Count).First()
.Items.Count;
var finalList = new List<string>();
for (var i = 0; i < maxGroupSize; i++)
{
finalList.AddRange(from wordGroup in groupedStrings
where i < wordGroup.Items.Count
select wordGroup.Items[i]);
}
您可以在Github中查看我的ShuffleProject。
你将能够洗牌列表,其中T是你想要的,和数组容易。
你将能够找到代码,如果你想在你的项目中使用它。dll。
https://github.com/Oscarbralo/ShuffleProject但是一般来说,你可以使用这样的东西!
public List<T> Shuffle(List<T> objects, int totalElements)
{
Random random = new Random();
List<T> resultList = new List<T>();
for (int i = 0; i < totalElements; i++)
{
int maxElements = objects.Count - 1;
int randomElement = random.Next(0, maxElements);
resultList.Add(objects[randomElement]);
objects.RemoveAt(randomElement);
}
return resultList;
}
希望对大家有所帮助