【问题标题】:Generate random words生成随机词
【发布时间】:2012-09-05 10:30:55
【问题描述】:

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

【问题讨论】:

    标签: c# c#-4.0 c#-3.0 c#-2.0


    【解决方案1】:
    Random rnd = new Random();
    string GetRandomFruit()
    {
        string[] fruits = new string[] { "apple", "mango", "papaya", "banana", "guava", "pineapple" };
        return fruits[rnd.Next(0,fruits.Length)];
    }
    

    【讨论】:

    • 我认为 Sasi 想要一个置换算法,而不是一个带有替换的随机选择,这是对的吗?
    • @Phillip IMO 可以以任何一种方式解释 - OP 不清楚。
    【解决方案2】:

    您可以使用 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 数组中为您提供每个项目一次

    【讨论】:

    • 我喜欢你的解决方案!除了 Sasi 在标签中指出 C#-2。
    【解决方案3】:

    您可以编写以下代码。

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

    【讨论】:

    • 你试过了吗?创建一个新的Random() 可以使用相同的种子并产生相同的输出。
    【解决方案4】:

    您可以使用 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
    

    【讨论】:

      猜你喜欢
      • 2013-09-20
      • 2017-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-03
      • 2016-09-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多