【发布时间】:2015-06-14 12:32:47
【问题描述】:
我有以下代码,它根据一个比率生成两个不重复的整数数组。代码完美运行,但对于 4000 行文件,这需要一些时间。
//Train & Test numbers
int train = (int)(((double)Settings.Default.TrainingRatio / 100) * inputLines.Count());
int test = inputLines.Count() - train;
//Train & Test list
Random rnd = new Random();
var trainList = Enumerable.Range(1, inputLines.Count()).OrderBy(x => rnd.Next()).Take(train).ToList();
var testList = new List<int>();
for (int i = 1; i <= inputLines.Count(); i++)
{
if (!trainList.Contains(i))
testList.Add(i);
}
更糟糕的是,这就是我阅读这些行的方式:
foreach (var n in trainList)
{
objDataintilizer.GenerateMasterLableFile(inputLines.Skip(n - 1).Take(1).First().ToString());
}
任何人都可以建议另一种可能具有更好性能的方法。
【问题讨论】:
-
inputLines是什么类型? -
它是一个包含行的列表
-
你读的怎么样?
-
File.ReadLines(InputFile);
-
啊……请把
inputLines.Skip(n - 1).Take(1).First()改成简单的……inputLines[n - 1]。不知道为什么要绕道 1000 英里,但可以肯定的是,这无助于您的代码更快,甚至更易读。