Node.js - 多图
Node.js - Multimap
我有以下数据(示例)-
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 以外的其他方法来实现此结果。
感谢帮助
不可能通过单个操作完成此操作,您需要在使用一些额外内存或消耗 CPU 资源之间做出选择。
- 使用更多内存
在这种情况下,您需要将数据存储在反向映射中。因此,您将有另一个映射存储为 "Value1C" -> 1。此解决方案可能会导致一致性问题,因为所有操作都需要在两个映射中更新。正本和反本。
此代码的示例是基本的:
//insert
map.set(1, "Value1C");
reverseMap.set("Value1C", 1);
//search
console.log(map.get(reverseMap.get("Value1C")));
- 使用更多CPU
在这种情况下,您需要对所有值进行搜索,这将是一个 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);
});
我有以下数据(示例)-
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 以外的其他方法来实现此结果。
感谢帮助
不可能通过单个操作完成此操作,您需要在使用一些额外内存或消耗 CPU 资源之间做出选择。
- 使用更多内存
在这种情况下,您需要将数据存储在反向映射中。因此,您将有另一个映射存储为 "Value1C" -> 1。此解决方案可能会导致一致性问题,因为所有操作都需要在两个映射中更新。正本和反本。 此代码的示例是基本的:
//insert
map.set(1, "Value1C");
reverseMap.set("Value1C", 1);
//search
console.log(map.get(reverseMap.get("Value1C")));
- 使用更多CPU
在这种情况下,您需要对所有值进行搜索,这将是一个 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);
});