c# - 将文件中的 10 行随机行(不重复)写入 15 个文件中的每一个
Posted
技术标签:
【中文标题】c# - 将文件中的 10 行随机行(不重复)写入 15 个文件中的每一个【英文标题】:c# - write 10 random lines from a file (without duplicates) into each of 15 files 【发布时间】:2021-03-29 02:29:10 【问题描述】:所以我一直在尝试制作一个函数
-
遍历包含 26 个文件的文件夹中的每个文件,
从一个 20 行的文件中随机抽取 10 行,
检查当前选择的行是否已经在当前文件中,如果是则再次尝试选择,
将 10 个随机行写入每个文件。
这是我到目前为止所得到的。但我不知道为什么它总是越界。我曾尝试通过循环将文件中的行放入另一个数组中,但这也无济于事。有没有人看到有什么问题?
string[] lines = File.ReadAllLines(@"randomLines.txt");
assignLines(lines);
static void assignLines(string[] listOfLines)
Random rnd = new Random();
foreach (var file in Directory.EnumerateFiles(@"files", @"*.txt"))
string[] assignedLines = new string[] ;
int j = 1;
int i = 0;
StreamWriter wr = new StreamWriter(file);
while (i < 5)
//for (int i = 0; i < File.ReadAllLines(file).Length + 1; i++)
int chosen = rnd.Next(0, listOfLines.Length - 1);
if (assignedLines.Contains(listOfLines[chosen]))
continue;
else
assignedLines[i] = listOfLines[chosen];
wr.WriteLine(j + ". " + listOfLines[chosen] + ".");
j++;
i++;
wr.Close();
【问题讨论】:
分配的行是一个长度为 0 的数组new string[] ;
我想您可能已经考虑将其用作 List您可以随机排列您的线,然后取出其中的 10 条,而不是获取一条随机线并每次循环槽线以查看它是否重复:
Random rnd = new Random();
string[] lines = File.ReadAllLines(@"randomLines.txt")
.OrderBy(x => rnd.Next())
Take(10)
.ToArray();
如果您在 cmets 中提到,您的行也可能包含重复项,然后在订购前删除重复项:
string[] lines = File.ReadAllLines(@"randomLines.txt")
.Distinct() //this line will remove duplicates
.OrderBy(x => rnd.Next())
Take(10)
.ToArray();
现在您可以循环思想文件并编写这 10 行代码。
【讨论】:
你的解决方案的问题是它们会重复并且没有检查重复 那么这 20 行本身就有重复项?这 20 行可以包含重复项吗? 这20行没有重复 这很好用,感谢您只需将.OrderBy(x => rnd.Next())
更改为 .OrderBy(x => rnd.Next(0, listOfLines.Length -1))
即可使用
@Typhoon 很高兴我能帮上忙【参考方案2】:
如果我明白你在问什么,理论上这应该对你有用
string[] lines = File.ReadAllLines("FILE");
// This will filter the array so that items which only appear once in 'lines' will be returned.
// Once because lines will also contain the current item we are checking against.
//Take 10 just returns the first 10 from that list
string[] linesThatOnlyApprearOnce = lines.Where(x => lines.Count(y => x == y) == 1).Take(10).ToArray();
【讨论】:
以上是关于c# - 将文件中的 10 行随机行(不重复)写入 15 个文件中的每一个的主要内容,如果未能解决你的问题,请参考以下文章