從.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