Dictionary <string,object =“”>与IEnumerable <keyvaluepair <string,object =“”>&gt;的区别是什么?

时间:2018-06-09 17:36:17

标签: c#

MongoDB有两种形式的BsonDocument构造函数:

BsonDocument(Dictionary<string, object> dictionary);
BsonDocument(IEnumerable<KeyValuePair<string, object>> dictionary);

Dictionary<string, object>表示string必须是唯一的,因此是字典。

IEnumerable只是一个迭代,string不一定是唯一的,但是IEnumerable<KeyValuePair<string, object>>表示可迭代的唯一值对,显然有资格用于字典,那么有什么区别?

1 个答案:

答案 0 :(得分:6)

首先,在字典中,密钥保证是唯一的(如果您尝试添加副本,则Dictionary将抛出异常)。 IEnumerable<KeyValuePair<string, object>>没有这样的保证。

其次,字典针对基于密钥的查找进行了高度优化。 IEnumerable中没有这样的概念,迫使您迭代集合以找到您的键值对。

最后,Dictionary是KeyValuePair<TKey, TValue>条目的专用集合,而不是单个KeyValuePair<TKey, TValue>条目。就英语词典而言,词典是书,而KeyValuePair<TKey, TValue>词条是单独的文章。

IEnumerable中,没有任何内容会限制您使用具有相同标识符的多篇文章,从而难以找到您的文章。更糟糕的是,订单可能完全是胡说八道,使得找到你的文章相当慢。

从本质上讲,它们是两种完全不同的收藏形式。第一个是(通常)哈希集,第二个是数组(通常,尽管IEnumerable接口显然可以在诸如字典的哈希集上实现。您可以选择适当任务的数据结构。