在长度为3的列表中随机化项目及其位置
本文关键字:项目 随机化 位置 列表 | 更新日期: 2023-09-27 18:01:18
我在List<Fruit> AllFruits
中有一个水果对象列表(包含大约60个左右的水果对象),我也有一个长度为3的空列表,用于容纳List<Fruit> FruitSelection
中三个水果的选择。
这是一个类似测验的游戏的一部分,所以在每一轮中,水果的位置需要不同(随机化)。
在c#中,我如何从AllFruits
中选择一个随机水果,然后将其放在随机位置在FruitSelection
中,然后为另外两个水果做同样的事情,并确保它们不重复并放置在FruitSelection
中尚未采取的位置?
p。水果具有独特的Name
属性
使用。net Random类。您可以将它用作Linq中OrderBy的参数。下面是一些代码(使用LinqPad):
var fruits = new List<string> { "apple", "orange", "mango" };
var r = new Random();
var newOrderFruits = fruits.OrderBy(x => r.Next()).ToList();
newOrderFruits.Dump();
你看,我只使用了一个包含三个字符串的列表,但是你可以用你的AllFruits列表替换我的水果字符串列表,每次得到不同的顺序。
请记住不要每次都使用新的Random实例!
像这样随机添加元素到列表中:
Random rand = new Random();
List<Fruit> FruitSelection = new List<Fruit>();
for(; FruitSelection.Count < 3;)
{
Fruit r = AllFruits[rand.Next(0, AllFruits.Count)];
if(!FruitSelection.Contains(r)) FruitSelection.Add(r);
}
Order
所有水果随机编号,Take
前3个。
var rand = new Random();
var FruitSelection = AllFruits.OrderBy(u => r.Next()).Take(3).ToList();