2012-09-05 1583 views
-6

苹果,芒果,木瓜,香蕉,番石榴,菠萝 - 如何使用c#随机生成这些单词(一个接一个)?请帮我从话我的列表中随机产生的话..生成随机词

回答

4
Random rnd = new Random(); 
string GetRandomFruit() 
{ 
    string[] fruits = new string[] { "apple", "mango", "papaya", "banana", "guava", "pineapple" }; 
    return fruits[rnd.Next(0,fruits.Length)]; 
} 
+0

我是正确的思想,萨西希望置换算法,而不是随机选择更换? –

+1

@Phillip国际海事组织可以解释任何方式 - OP不明确。 – StuartLC

3

你可以得到“随机排序”与LINQ的OrderBy方法和使用Guid小号

var words = new [] {"apple", "mango", "papaya", "banana", "guava", "pineapple"}; 
var wordsInRandomOrder = words.OrderBy(i => Guid.NewGuid()); 

foreach(var word in wordsInRandomOrder) 
{ 
    Console.WriteLine(word); 
} 

以下foreach将按照随机顺序从words阵列给您每个项目一次。

+0

我喜欢你的解决方案!除了Sasi在标签中标明了C#-2。 –

2

你可以写下面的代码。

string[] fruits = new string[] { "apple", "mango", "papaya", "banana", "guava", "pineapple" }; 
Console.WriteLine(fruits[new Random().Next(0, fruits.Length)]); 
+0

你试过这个吗?创建一个新的Random()可以使用相同的种子进行播种并生成相同的输出。 – StuartLC

3

可以使用费雪耶茨在阵列中的位置洗牌做的:

static class ArrayMethods 
{ 
    private static readonly Random rng = new Random(); 
    public static void Shuffle<T>(IList<T> list) 
    { 
     var r = rng; 
     var len = list.Count; 
     for(var i = len-1; i >= 1; --i) 
     { 
      var j = r.Next(i); 
      var tmp = list[i]; 
      list[i] = list[j]; 
      list[j] = tmp; 
     } 

    } 
} 

如下:

var arr = new[]{ 
    "apple", 
    "mango", 
    "papaya", 
    "banana", 
    "guava", 
    "pineapple" 
}; 
ArrayMethods.Shuffle(arr); 
foreach(var item in arr) 
    //print 'em out