从.net 2.0框架的C#中的字符串数组中获取随机值的最快方法是什么?我想他们可能有过这样的:从C#中的字符串数组中获取随机值的最快方法?
string[] fileLines = File.ReadAllLines(filePath);
fileLines.GetRandomValue();
是的,我知道GetRandomValue()是不是一个实际的方法,有没有类似的东西,或多或少同样短暂的甜蜜?
从.net 2.0框架的C#中的字符串数组中获取随机值的最快方法是什么?我想他们可能有过这样的:从C#中的字符串数组中获取随机值的最快方法?
string[] fileLines = File.ReadAllLines(filePath);
fileLines.GetRandomValue();
是的,我知道GetRandomValue()是不是一个实际的方法,有没有类似的东西,或多或少同样短暂的甜蜜?
不是内置的,但很容易添加...
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中,这可能是b为E的扩展方法:
public static T GetRandomValue<T>(this T[] values) {...}
然后,你可以用它准确地按照你的例子:
string[] fileLines = File.ReadAllLines(filePath);
string val = fileLines.GetRandomValue();
另一种方法是使rand [ThreadStatic]并使用从系统时间和ThreadID派生的种子,并避免完全锁定... – 2009-09-08 09:12:56
谢谢Marc,完美! – 2009-09-08 09:13:06
就我个人而言,我认为这是一种滥用扩展方法来将其作为一个扩展方法。显然,应用程序中的所有字符串[]数组不是必需的。 – 2009-09-08 09:14:21
确实。
Random m = new Random();
string line = fileLines[m.Next(0, fileLines.Length);
+1,这也适用。 – 2009-09-08 09:14:08
尝试:
fileLines [new Random().Next (fileLines.Length)]
+1,为单线。 – 2009-09-08 09:17:03
快速连续调用多次(例如,在紧密循环中)将每次都返回相同的行。 – LukeH 2009-09-08 09:28:58
我不认为阵列支持这样的功能。最简单的方法是获得一个随机数,并获得相应的项目。
Random rnd = new Random();
String item = fileLines[rnd.next(fileLines.Length);
+1,这也适用。 – 2009-09-08 09:14:44
LINQ to SQL的方式
var rFile = fileLines.OrderBy(x => Guid.NewGuid()).FirstOrDefault();
如果你看到错误,你应该添加System.Linq的;
我会用这种方法来从一个数组获得随机项:
string[] str = {"red","blue","pink","yellow","green","brown"};
int i = new Random.Next(0, str.length);
MessageBox.Show(str[i]);
你是什么意思有:getrandomvalue()?它应该返回数组的一个随机行吗? – Toad 2009-09-08 09:01:51
我想你想要计算某种散列值?请参阅:http://stackoverflow.com/questions/1388702/c-md5-calculation-issue – 2009-09-08 09:02:41