Fastest way to get a random value from a string ar

2020-07-17 08:43发布

问题:

What's the fastest way to get a random value from a string array in C# on the .net 2.0 framework? I figured they might have had this:

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

Yes, I know GetRandomValue() is not an actual method, is there something similar that's more or less equally short and sweet?

回答1:

Not built in, but easy enough to add...

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

(the static field helps ensure we don't get repeats if we use it in a tight loop, and the lock keeps it safe from multiple callers)

In C# 3.0, this could be an extension method:

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

Then you could use it exactly as per your example:

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


回答2:

Indeed.

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


回答3:

I don't think arrays support such a function. The easiest way is just to get a random number, and get the corresponding item.

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


回答4:

Try:

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


回答5:

Linq To Sql way

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

If you see error you should add System.Linq;



回答6:

I'd have used this method to get random item from an array :

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