所以我在List<Fruit> AllFruits
中有一个水果对象列表(包含大约60个左右的水果对象),我还有一个长度为3的空列表,用于存放三个水果List<Fruit> FruitSelection
。< / p>
这是类似测验的游戏的一部分,因此在每一轮中,果实的位置需要不同(随机)。
在C#中,我如何从AllFruits
中选择随机水果,然后将其置于FruitSelection
中的随机位置,然后执行另外两个水果相同,并确保它们不重复并放置在FruitSelection
范围内尚未进入的位置?
PS。 Fruit具有唯一的Name
属性。
答案 0 :(得分:4)
使用.net Random类。您可以将它用作Linq中OrderBy的参数。所以这里有一些代码(使用LinqPad):
MoviePlayer.repeatMode = MPMovieRepeatModeOne;
您看到我只使用了三个字符串的列表,但您可以将AllFruits列表替换为我的水果字符串列表,并且每次都会获得不同的顺序。
请记住每次都不要使用新的Random实例!
答案 1 :(得分:3)
只需在列表中添加随机元素,如下所示:
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);
}
答案 2 :(得分:1)
Order
所有水果的随机数和Take
3个第一。
var rand = new Random();
var FruitSelection = AllFruits.OrderBy(u => r.Next()).Take(3).ToList();