我在c#中有一个项目列表,需要根据以下格式对项目进行随机播放。如果可能在Linq Query中做同样的事情?
Input Sample data
**Frouts**
Orange
Orange
Orange
Orange
Mango
Mango
Mango
Mango
Mango
Mango
Apple
Apple
Apple
我需要关注Out put
**Frouts**
Orange
Mango
Apple
Orange
Mango
Apple
Orange
Mango
Apple
Orange
Mango
Mango
Mango
答案 0 :(得分:3)
此代码将执行您想要的操作,并提供您指定的输出:
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]);
}
答案 1 :(得分:0)
您可以在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;
}
我希望这会有所帮助