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

发布于 2024-08-03 23:06:26 字数 227 浏览 5 评论 0原文

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

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

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

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?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

ま柒月 2024-08-10 23:06:26

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

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();

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();
浅笑依然 2024-08-10 23:06:26

的确。

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

Indeed.

Random m = new Random();
string line = fileLines[m.Next(0, fileLines.Length);
蓝海似她心 2024-08-10 23:06:26

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

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

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);
墨洒年华 2024-08-10 23:06:26

尝试:

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

Try:

fileLines [new Random ().Next (fileLines.Length)]
白云悠悠 2024-08-10 23:06:26

Linq To Sql 方式

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

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

Linq To Sql way

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

If you see error you should add System.Linq;

套路撩心 2024-08-10 23:06:26

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

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

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]);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文