从文件中读取随机行? C#

我有一个几百行的文本文件,结构很简单。

名字姓氏

我需要从文件中挑选一个随机的firstname和listname。

string[] lines = File.ReadAllLines(...); //i hope that the file is not too big Random rand = new Random(); return lines[rand.Next(lines.Length)]; 

另一个(也许更好)选项是让文件的第一行包含其中的记录数,然后您不必读取所有文件。

读取每行,保持您目前所看到的行数N。 选择每条线的概率为1 / N,即第一条线将始终被选中,第二条线将被选择1/2次以替换第一条线,第三条线被选择1/3次,…这样每条线都有一条线作为所选行的1 / N概率,您只需要读取一次文件,并且您不需要在任何给定时间将所有文件存储在内存中。

这是一个可以根据您的需求进行调整的实现。

 public string RandomLine( StreamReader reader ) { string chosen = null; int numberSeen = 0; var rng = new Random(); while ((string line = reader.ReadLine()) != null) { if (rng.NextInt(++numberSeen) == 0) { chosen = line; } } return chosen; } 

基于用于从任意长链表中选择节点的C实现 。