在长度为3的列表中随机化项目及其位置

本文关键字:项目 随机化 位置 列表 | 更新日期: 2023-09-27 18:01:18

我在List<Fruit> AllFruits中有一个水果对象列表(包含大约60个左右的水果对象),我也有一个长度为3的空列表,用于容纳List<Fruit> FruitSelection中三个水果的选择。

这是一个类似测验的游戏的一部分,所以在每一轮中,水果的位置需要不同(随机化)。

在c#中,我如何AllFruits中选择一个随机水果,然后将其放在随机位置FruitSelection中,然后为另外两个水果做同样的事情,并确保它们不重复并放置在FruitSelection中尚未采取的位置?

p。水果具有独特的Name属性

在长度为3的列表中随机化项目及其位置

使用。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();