MongoDB有两种形式的BsonDocument构造函数:
BsonDocument(Dictionary<string, object> dictionary);
BsonDocument(IEnumerable<KeyValuePair<string, object>> dictionary);
Dictionary<string, object>
表示string
必须是唯一的,因此是字典。
IEnumerable
只是一个迭代,string
不一定是唯一的,但是IEnumerable<KeyValuePair<string, object>>
表示可迭代的唯一值对,显然有资格用于字典,那么有什么区别?
答案 0 :(得分:6)
首先,在字典中,密钥保证是唯一的(如果您尝试添加副本,则Dictionary将抛出异常)。 IEnumerable<KeyValuePair<string, object>>
没有这样的保证。
其次,字典针对基于密钥的查找进行了高度优化。 IEnumerable
中没有这样的概念,迫使您迭代集合以找到您的键值对。
最后,Dictionary是KeyValuePair<TKey, TValue>
条目的专用集合,而不是单个KeyValuePair<TKey, TValue>
条目。就英语词典而言,词典是书,而KeyValuePair<TKey, TValue>
词条是单独的文章。
在IEnumerable
中,没有任何内容会限制您使用具有相同标识符的多篇文章,从而难以找到您的文章。更糟糕的是,订单可能完全是胡说八道,使得找到你的文章相当慢。
从本质上讲,它们是两种完全不同的收藏形式。第一个是(通常)哈希集,第二个是数组(通常,尽管IEnumerable
接口显然可以在诸如字典的哈希集上实现。您可以选择适当任务的数据结构。