Mat*_*oSp 30 c# generics collections dictionary thread-safety
基本上我想要像Dictionary <Tkey1,TKey2,TValue>这样的东西,但不是(正如我在其他问题中看到过的那样)和AND中的键,但是在OR中.为了更好地解释:我希望能够在字典中找到只提供其中一个键的元素,而不是两者.
我还认为我们应该考虑线程安全性以及轻松扩展到Dictionary <Tkey1,TKey2,TKeyN,TValue>解决方案的能力......
tst*_*ter 21
我将使用这两个字典实现数据结构
Dictionary<TKey1, KeyValuePair<TKey2, TValue>> dict1;
Dictionary<TKey2, KeyValuePair<TKey1, TValue>> dict2;
Run Code Online (Sandbox Code Playgroud)
这样,如果您获得1个密钥,则同时拥有值和其他密钥以便于删除和更新.
Jul*_*iet 12
所以你想要一个多索引字典,支持基于任何键的查找,并支持多个键的扩展?
也许您正在考虑错误的数据结构,请尝试使用KD-Tree.不可变的KD树将满足线程安全要求.
与天真Dictionary{Key1, Dictionary{Key2, Value}}方法相比,KD树具有一些主要优势,即您可以在不知道Key1的情况下基于Key2搜索所有字段.此外,KD树允许您搜索其他键附近的键.例如,约会网站将人们分为几十个群体(吸烟者/非吸烟者,性别,宗教,生活方式,年龄,身高),然后根据您的查询返回最近的邻居.
这是一个C#和Java实现:
http://home.wlu.edu/~levys/software/kd/
我要在这里走出去并且看起来很愚蠢,但你可以根据两个字典滚动你自己的字典.写入(即使使用锁定机制来确保线程安全)也不会太困难.我的意思是,有很多例子可以使用索引或密钥来访问集合.(如会话)
相反,如果您的多个索引属于同一类型,则可以多次添加相同的项目.
Dictionary将支持具有GUID索引的内容,以及简单的名称索引"Joe" - 您必须记住将项添加两次.