字典的 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 是否保证始终以相同的顺序返回内容?
这
不能保证。当然,它适用于SortedDictionary<>也适用于数组和列表。但不是字典。
很有可能,如果不更改字典,它会很稳定 - 但不能保证。你必须问问自己——你觉得幸运吗?;)
如果您想按插入元素的顺序获取元素,那么您可能应该查看堆栈和队列,具体取决于您首先想要的元素。
是的,你会得到相同的项目。
正如您所指定的,您提出的方法是非常低效的方法。
ElementAtOrDefault 是 IEnumerable 的 LINQ 扩展方法,这意味着对于每个项目,它将一直迭代到指定的项目。