随机化一系列餐馆

时间:2013-12-20 03:17:02

标签: c# arrays random

对于我的计算机科学入门课程,我必须创建一个应用程序来选择具有各种功能的餐馆,但我无法弄清楚如何随机化数组。 以下是我的代码。

string[] myRestaurants = new string[9];

myRestaurants[0] = "Wendy's";
myRestaurants[1] = "Arby's";
myRestaurants[2] = "Olive Garden";
myRestaurants[3] = "The Pie";
myRestaurants[4] = "The Cheesecake Factory";
myRestaurants[5] = "Beto's";
myRestaurants[6] = "Dillinger's Saloon";
myRestaurants[7] = "Dayz Alpher";
myRestaurants[8] = "Firehouse subs";

var nextArray = myRestaurants.ToList();
Random rng = new Random();  
int n = nextArray.Count;
while (n > 1)
{
    n--;
    int k = rng.Next(n + 1);
    T value = nextArray[k];
    nextArray[k] = nextArray[n];
    nextArray[n] = value;
    //bang
}

3 个答案:

答案 0 :(得分:5)

您可以使用LINQ和OrderBy方法将其随机化..再加上您的Random类:

myRestaurants = myRestaurants
                    .OrderBy(x => myRandom.Next(myRestaurants.Length))
                    .ToArray();

答案 1 :(得分:1)

以下示例随机拍摄照片。

Random rand=new Random();
string[] RandomArray = myRestaurants.OrderBy(r => rand.Next()).ToArray();

答案 2 :(得分:0)

这是使用Fisher-Yates机制的通用实现:

public static class Extensions
{
    public static void Shuffle<T>(this IList<T> list)
    {
        var rnd = new Random();

        for (int i = list.Count - 1; i >= 0; i--)
        {
            var r = rnd.Next(i + 1);
            T value = list[r];
            list[r] = list[i];
            list[i] = value;
        }
    }
}

用法:

myRestaurants.Shuffle();

示例输出:

  • The Pie
  • Dillinger's Saloon
  • Beto's
  • 橄榄园
  • 芝士蛋糕工厂
  • Dayz Alpher
  • Firehouse subs
  • Arby的
  • 温迪的