【发布时间】:2012-09-05 10:30:55
【问题描述】:
苹果、芒果、木瓜、香蕉、番石榴、菠萝 - 如何使用 c# 随机(一个接一个)生成这些单词?请帮我从我拥有的单词列表中随机生成单词..
【问题讨论】:
苹果、芒果、木瓜、香蕉、番石榴、菠萝 - 如何使用 c# 随机(一个接一个)生成这些单词?请帮我从我拥有的单词列表中随机生成单词..
【问题讨论】:
Random rnd = new Random();
string GetRandomFruit()
{
string[] fruits = new string[] { "apple", "mango", "papaya", "banana", "guava", "pineapple" };
return fruits[rnd.Next(0,fruits.Length)];
}
【讨论】:
您可以使用 LINQ 的 OrderBy 方法和使用 Guids 获得“随机排序”
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 数组中为您提供每个项目一次。
【讨论】:
您可以编写以下代码。
string[] fruits = new string[] { "apple", "mango", "papaya", "banana", "guava", "pineapple" };
Console.WriteLine(fruits[new Random().Next(0, fruits.Length)]);
【讨论】:
Random() 可以使用相同的种子并产生相同的输出。
您可以使用 Fisher-Yates 对数组进行就地洗牌:
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
【讨论】: