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

时间:2009-09-08 08:57:53

标签: c# arrays string .net-2.0

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

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

是的,我知道GetRandomValue()不是一个实际的方法,是否有类似的东西或多或少同样短而甜?

6 个答案:

答案 0 :(得分:12)

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

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

static字段有助于确保我们在紧密循环中使用它时不会重复,并且lock可以保护它不受多个调用者的影响。

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

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

然后你可以完全按照你的例子使用它:

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

答案 1 :(得分:1)

确实

Random m = new Random();
string line = fileLines[m.Next(0, fileLines.Length);

答案 2 :(得分:1)

尝试:

fileLines [new Random ().Next (fileLines.Length)]

答案 3 :(得分:1)

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

Random rnd = new Random();
String item = fileLines[rnd.next(fileLines.Length);

答案 4 :(得分:0)

Linq To Sql方式

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

如果看到错误,则应添加System.Linq;

答案 5 :(得分:0)

我已经使用此方法从数组中获取随机项:

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