Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C语言中快速高效的迭代器#_C#_Linq - Fatal编程技术网

C# C语言中快速高效的迭代器#

C# C语言中快速高效的迭代器#,c#,linq,C#,Linq,我有一个单词的集合,并希望为每个单词分配一个唯一的int值。我读了一段关于LINQ的书,得出了以下结论: var words = File.ReadAllLines(wordsFile); var numbers = Enumerable.Range(1, words.Count()); var dict = words .Zip(numbers, (w, n) => new { w, n }) .ToDictionary(i => i.w, i => i.n)

我有一个单词的集合,并希望为每个单词分配一个唯一的int值。我读了一段关于LINQ的书,得出了以下结论:

var words = File.ReadAllLines(wordsFile);
var numbers = Enumerable.Range(1, words.Count());
var dict = words
    .Zip(numbers, (w, n) => new { w, n })
    .ToDictionary(i => i.w, i => i.n);
问题是:

  • 这是一个好方法吗?它在性能方面是否有效
  • 从简单性(清晰的代码)的角度来看,有没有更好的方法来做到这一点

  • 您不需要使用
    Enumerable.Range
    Zip
    方法,因为您可以使用
    Select
    重载来提供索引:

    var dict = File.ReadLines(wordsFile)
        .Select((word, index) => new { word, index })
        .ToDictionary(x => x.word, x => x.index + 1);
    

    Select
    已经有一个重载,可以为您提供每个元素的索引,因此您可以非常轻松地删除
    Zip
    Enumerable.Range
    。。。