我有一组单词,想为每个单词分配一个唯一的 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.RangeZip 方法,因为您可以使用为您提供索引的 Select 重载:

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

    关于c# - C#中快速高效的迭代器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30347224/

    10-13 02:39