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

时间:2010-09-19 13:52:31

标签: c# .net file

我有一个包含几百行的文本文件,结构非常简单。

firstname lastname

我需要随机选择一个名字&文件中的listname。

2 个答案:

答案 0 :(得分:15)

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

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

答案 1 :(得分:11)

读取每行,保持您目前所看到的行数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 implementation从任意长链表中选择节点。