我使用兩個幾乎相同的(唯一的例外是,一個有.ToDictinct()
,而另一個不)調用。是否有可能將它們變成一種我可以在一個地方打電話和更換的方法?使LINQ到字典進入方法體
private void Splitter1(string[] file)
{
tempDict = file
.SelectMany(i => File.ReadAllLines(i)
.SelectMany(line => line.Split(new[] { ' ', ',', '.', '?', '!', '{', '[', '(', '}', ']', ')',
'<', '>', '-', '=', '/', '"', ';', ':', '+', '_', '*' }, StringSplitOptions.RemoveEmptyEntries))
.AsParallel()
.Select(word => word.ToLower())
.Where(word => !StopWords.Contains(word))
.Where(word => !PopulatNetworkWords.Contains(word))
.Where(word => !word.All(char.IsDigit))
.Distinct())
.GroupBy(word => word)
.ToDictionary(g => g.Key, g => g.Count());
}
private void Splitter2(string[] file)
{
tempDict = file
.SelectMany(i => File.ReadAllLines(i)
.SelectMany(line => line.Split(new[] { ' ', ',', '.', '?', '!', '{', '[', '(', '}', ']', ')',
'<', '>', '-', '=', '/', '"', ';', ':', '+', '_', '*' }, StringSplitOptions.RemoveEmptyEntries)))
.AsParallel()
.Select(word => word.ToLower())
.Where(word => !StopWords.Contains(word))
.Where(word => !PopulatNetworkWords.Contains(word))
.Where(word => !word.All(char.IsDigit))
.GroupBy(word => word)
.ToDictionary(g => g.Key, g => g.Count());
}
這將是一個小OT,但更改'ReadAllLines'到'ReadLines'就夠了嗎?或者它需要一些東西(也許它會返回不同類型的數據?)? –
'ReadAllLines'返回'string []'和'ReadLines'返回'IEnumerable',但是您使用'ReadAllLines'的方式除了實現'IEnumerable '這個事實外,並不依賴於'string []',所以你可以簡單地用'ReadLines'替換'ReadAllLines'。其他的替換可能需要更多的工作(如果它已經通過索引通過數組),或者甚至不值得。 –
ReadAllLines是一個很好的優化 –