C# 读写';n';txt文件中的随机行数
我试图从一个包含200个条目(行)的文本文件中读取(n)个随机行,并填充一个名为“recSongs”的列表框。我提供了一些简单的代码,可以从文本文件中随机检索一行,但我希望检索n个数量 这是我的密码C# 读写';n';txt文件中的随机行数,c#,winforms,C#,Winforms,我试图从一个包含200个条目(行)的文本文件中读取(n)个随机行,并填充一个名为“recSongs”的列表框。我提供了一些简单的代码,可以从文本文件中随机检索一行,但我希望检索n个数量 这是我的密码 var lines = File.ReadAllLines(@"file.txt"); var r = new Random(); var randomLineNumber = r.Next(0, lines.Length - 1); var line = lines[randomLineNumbe
var lines = File.ReadAllLines(@"file.txt");
var r = new Random();
var randomLineNumber = r.Next(0, lines.Length - 1);
var line = lines[randomLineNumber];
recSongs.Items.Add(line);
n将是输入,即所需的行数
List <string> text = File.ReadLines("file.txt").Take(n).ToList();
List text=File.ReadLines(“File.txt”).Take(n.ToList();
编辑
如果你需要随机线,你可以
string[] lines = File.ReadAllLines(@"C:\YourFile.txt");
List<string> source = new List<string>();
int n = 10;
for (int i = 0; i < n; i++)
{
source.Add(lines[new Random().Next(lines.Length)]);
}
string[]lines=File.ReadAllLines(@“C:\YourFile.txt”);
列表源=新列表();
int n=10;
对于(int i=0;i
n将作为输入,即您需要的行数
List <string> text = File.ReadLines("file.txt").Take(n).ToList();
List text=File.ReadLines(“File.txt”).Take(n.ToList();
编辑
如果你需要随机线,你可以
string[] lines = File.ReadAllLines(@"C:\YourFile.txt");
List<string> source = new List<string>();
int n = 10;
for (int i = 0; i < n; i++)
{
source.Add(lines[new Random().Next(lines.Length)]);
}
string[]lines=File.ReadAllLines(@“C:\YourFile.txt”);
列表源=新列表();
int n=10;
对于(int i=0;i
这将向您的收藏中添加numLines
随机行。请注意,有可能存在重复项
var lines = File.ReadAllLines(@"file.txt");
var r = new Random();
int numLines = 5;
for (int i = 0; i < numLines; i++)
{
recSongs.Items.Add(lines[r.Next(0, lines.Length - 1)]);
}
var lines=File.ReadAllLines(@“File.txt”);
var r=新的随机变量();
int numLines=5;
对于(int i=0;i
要强制实施唯一项,可以执行以下操作:
for (int i = 0; i < numLines; i++)
{
var randomItem = string.Empty;
do
{
randomItem = lines[r.Next(0, lines.Length - 1)];
} while (recSongs.Contains(randomItem));
recSongs.Items.Add(randomItem);
}
for(int i=0;i
但现在请注意,它可能永远不会退出。随机的快乐 这将向您的收藏添加
numLines
随机行。请注意,有可能存在重复项
var lines = File.ReadAllLines(@"file.txt");
var r = new Random();
int numLines = 5;
for (int i = 0; i < numLines; i++)
{
recSongs.Items.Add(lines[r.Next(0, lines.Length - 1)]);
}
var lines=File.ReadAllLines(@“File.txt”);
var r=新的随机变量();
int numLines=5;
对于(int i=0;i
要强制实施唯一项,可以执行以下操作:
for (int i = 0; i < numLines; i++)
{
var randomItem = string.Empty;
do
{
randomItem = lines[r.Next(0, lines.Length - 1)];
} while (recSongs.Contains(randomItem));
recSongs.Items.Add(randomItem);
}
for(int i=0;i
但现在请注意,它可能永远不会退出。随机的快乐 可能最简单的方法(虽然不是最有效的内存)是将文件拖到内存中的行集合中,然后
Shuffle()
行,并根据需要取任意多行:
public static IEnumerable<T> Shuffle<T>(this IEnumerable<T> input)
{
var buffer = input.ToArray();
//Math.Random is OK for "everyday" randomness;
//use RNGCryptoServiceProvider if you need
//cryptographically-strong randomness
var rand = new Random();
//As the loop proceeds, the element to output will be randomly chosen
//from the elements at index i or above, which will then be swapped
//with i to get it out of the way; the yield return gives us each
//shuffled value as it is chosen, and allows the shuffling to be lazy.
for (int i = 0; i < buffer.Length; i++)
{
int j = rand.Next(i, buffer.Length);
yield return buffer[j];
//if we cared about the elements in the buffer this would be a swap,
//but we don't, so...
buffer[j] = buffer[i];
}
}
...
string[] fileLines = GetLinesFromFile(fileName); //a StreamReader makes this pretty easy
var randomLines = fileLines.Shuffle().Take(n);
公共静态IEnumerable Shuffle(此IEnumerable输入)
{
var buffer=input.ToArray();
//数学。随机性对于“每天”的随机性来说是可以的;
//如果需要,请使用RNGCryptoServiceProvider
//密码学强随机性
var rand=new Random();
//随着循环的进行,将随机选择要输出的元素
//从索引i或更高的元素,然后将交换这些元素
//我想把它弄出去,收益率给了我们每个人
//在选择时,将其作为随机值,并允许延迟随机。
for(int i=0;i
一些注意事项:
- 对于一个大约200行的文本文件来说,这应该可以很好地工作;超过几十万行,您将开始出现内存问题。一个更具可扩展性的解决方案是将行号数组洗牌,然后使用这些行号查找并读取所需的特定行,丢弃所有其他行
- 此解决方案以随机顺序生成随机线。如果要保留文件中行的顺序,请执行行号变体,对所选行号进行排序,然后在从文件中读取行后将其保持在该顺序
Shuffle()
这些行,然后根据需要取任意多行:
public static IEnumerable<T> Shuffle<T>(this IEnumerable<T> input)
{
var buffer = input.ToArray();
//Math.Random is OK for "everyday" randomness;
//use RNGCryptoServiceProvider if you need
//cryptographically-strong randomness
var rand = new Random();
//As the loop proceeds, the element to output will be randomly chosen
//from the elements at index i or above, which will then be swapped
//with i to get it out of the way; the yield return gives us each
//shuffled value as it is chosen, and allows the shuffling to be lazy.
for (int i = 0; i < buffer.Length; i++)
{
int j = rand.Next(i, buffer.Length);
yield return buffer[j];
//if we cared about the elements in the buffer this would be a swap,
//but we don't, so...
buffer[j] = buffer[i];
}
}
...
string[] fileLines = GetLinesFromFile(fileName); //a StreamReader makes this pretty easy
var randomLines = fileLines.Shuffle().Take(n);
公共静态IEnumerable Shuffle(此IEnumerable输入)
{
var buffer=input.ToArray();
//数学。随机性对于“每天”的随机性来说是可以的;
//如果需要,请使用RNGCryptoServiceProvider
//密码学强随机性
var rand=new Random();
//随着循环的进行,将随机选择要输出的元素
//从索引i或更高的元素,然后将交换这些元素
//我想把它弄出去,收益率给了我们每个人
//在选择时,将其作为随机值,并允许延迟随机。
for(int i=0;i
一些注意事项:
- 对于一个大约200行的文本文件来说,这应该可以很好地工作;超过二十万