我有以下数据(示例) -
1 - “Value1A” 1 - “Value1B” 1 - “Value1C” 2 - “Value2A” 2 - “Value2B”
我正在使用Multimaps来获取上述数据,这样键1有3个值(Value1A,Value1B,Value1C),键2有2个值(Value2A,Value2B)。
当我尝试使用get函数检索给定键的所有值时,它可以工作。但我希望得到关键的价值。即如果我有“Value1C”,我想用它来从Multimap获取它的键1。这是否可行,如果是这样,我可以使用Multimap以外的其他方式来实现此结果。
感谢您的帮助
答案 0 :(得分:2)
单个操作无法执行此操作,您需要选择使用一些额外内存或消耗CPU资源。
在这种情况下,您需要将数据存储在反向映射中。所以你将有另一张地图存储为“Value1C” - > 1.此解决方案可能会导致一致性问题,因为所有操作都需要在两个映射中更新。原始的和反向的。 此代码的示例是基本的:
//insert
map.set(1, "Value1C");
reverseMap.set("Value1C", 1);
//search
console.log(map.get(reverseMap.get("Value1C")));
在这个原因中,您将需要搜索所有值,这将是O(n)复杂度。如果你的列表太大,那就不好了,甚至在像Node.js这样的单个线程环境中也是如此。 检查下面的代码示例:
function findValueInMultiMap(map, value, callback){
map.forEachEntry(function (entry, key) {
for(var e in entry){
if(entry[e]==value){
callback(map.get(key));
}
}
});
}
findValueInMultiMao(map, 'Value1C', function(values){
console.log(values);
});