字典的 IEnumerator 是否保证是一致的

本文关键字:IEnumerator 是否 字典 | 更新日期: 2023-09-27 17:56:14

所以,我找到了一段这样的代码:

class CustomDictionary
{
  Dictionary<string, string> backing;
  ...
  public string Get(int index)
  {
    return backing.ElementAtOrDefault(index); //use linq extensions on IEnumerable
  }
}

然后这样使用:

for(int i=0;i<mydictionary.Count;i++)
{
  var value=mydictionary.Get(i);
}

除了这样做的性能问题和丑陋之外,这段代码真的正确吗?即,假设在迭代过程中字典没有修改任何内容,字典上的 IEnumerable 是否保证始终以相同的顺序返回内容?

字典的 IEnumerator 是否保证是一致的

不能保证。当然,它适用于SortedDictionary<>也适用于数组和列表。但不是字典。

很有可能,如果不更改字典,它会很稳定 - 但不能保证。你必须问问自己——你觉得幸运吗?;)

如果您想按插入元素的顺序获取元素,那么您可能应该查看堆栈和队列,具体取决于您首先想要的元素。

是的,你会得到相同的项目。

正如您所指定的,您提出的方法是非常低效的方法。

ElementAtOrDefault 是 IEnumerable 的 LINQ 扩展方法,这意味着对于每个项目,它将一直迭代到指定的项目。