在长度为3

时间:2015-07-07 12:04:15

标签: c#

所以我在List<Fruit> AllFruits中有一个水果对象列表(包含大约60个左右的水果对象),我还有一个长度为3的空列表,用于存放三个水果List<Fruit> FruitSelection。< / p>

这是类似测验的游戏的一部分,因此在每一轮中,果实的位置需要不同(随机)。

在C#中,我如何AllFruits中选择随机水果,然后将其置于FruitSelection中的随机位置,然后执行另外两个水果相同,并确保它们不重复并放置在FruitSelection范围内尚未进入的位置?

PS。 Fruit具有唯一的Name属性。

3 个答案:

答案 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();