代码之家  ›  专栏  ›  技术社区  ›  Mr. Smith

从C中的字符串数组中获取随机值的最快方法

  •  4
  • Mr. Smith  · 技术社区  · 15 年前

    从.NET 2.0框架中的C字符串数组中获取随机值的最快方法是什么?我想他们可能是这样的:

    string[] fileLines = File.ReadAllLines(filePath);
    fileLines.GetRandomValue();
    

    是的,我知道getRandomValue()不是一个实际的方法,是否有一些相似的东西或多或少都是短而甜的?

    6 回复  |  直到 10 年前
        1
  •  12
  •   Marc Gravell    15 年前

    不是内置的,但很容易添加…

    static readonly Random rand = new Random();
    public static T GetRandomValue<T>(T[] values) {
        lock(rand) {
            return values[rand.Next(values.Length)];
        }
    }
    

    (the static 字段有助于确保在紧密循环中使用它时不会得到重复,并且 lock 避免多个呼叫者使用)

    在C 3.0中,这可能是一种扩展方法:

    public static T GetRandomValue<T>(this T[] values) {...}
    

    然后您可以完全按照您的示例使用它:

    string[] fileLines = File.ReadAllLines(filePath);
    string val = fileLines.GetRandomValue();
    
        2
  •  1
  •   Noon Silk    15 年前

    的确。

    Random m = new Random();
    string line = fileLines[m.Next(0, fileLines.Length);
    
        3
  •  1
  •   Ikke    15 年前

    我认为数组不支持这样的函数。最简单的方法就是得到一个随机数,然后得到相应的项目。

    Random rnd = new Random();
    String item = fileLines[rnd.next(fileLines.Length);
    
        4
  •  1
  •   Tim Cooper    12 年前

    尝试:

    fileLines [new Random ().Next (fileLines.Length)]
    
        5
  •  0
  •   Ä°brahim Özbölük    10 年前

    LINQ to SQL方式

    var rFile = fileLines.OrderBy(x => Guid.NewGuid()).FirstOrDefault();
    

    如果您看到错误,应该添加system.linq;

        6
  •  0
  •   mr.memo    10 年前

    我会用这个方法从数组中获取随机项:

    string[] str = {"red","blue","pink","yellow","green","brown"};
    int i = new Random.Next(0, str.length);
    MessageBox.Show(str[i]);