我有一个字典,我想按值搜索这个字典,而不是按键:-)。我想这样做,因为JS中的Dictionary没有重复键。我需要允许我的程序有重复的键,但永远不会重复值。
示例:
lp=new Dictionary.<int,int>();
lp.Add(2,5);
lp.Add(5,0);
lp.Add(1,3);
lp.Add(2,6);// duplicate key and error
切换值和键后:
lp=new Dictionary.<int,int>();
lp.Add(5,2);
lp.Add(0,5);
lp.Add(3,1);
lp.Add(6,2);
现在我想按值查找键,因为我在此结果中有值。
Code可以接受Javascript中的重复键吗?
答案 0 :(得分:1)
为什么不使用列表字典?:
#pragma strict
import System.Collections.Generic;
var map = new Dictionary.<int,List.<int> >();
function Start () {
Add(2,1);
Add(2,2);
Add(2,3);
Add(3,0);
for(var kvp in map){
for(var v in kvp.Value){
Debug.Log("Key: "+kvp.Key + "Value: " +v);
}
}
}
function Add(key:int,value:int){
if (!map.ContainsKey(key) ){
map[key] = new List.<int>();
}
map[key].Add(value);
}
<强>更新强>
轻微修改以避免重复值:
var map = new Dictionary.<int,HashSet.<int> >();
function Add(key:int,value:int){
if (!map.ContainsKey(key) ){
map[key] = new HashSet.<int>();
}
if (map[key].Contains(value))return;
map[key].Add(value);
}
这些只是C#集合的包装器,因此对字典进行排序只是:
function SortedKeys(){
var keys = new List.<int>(map.Keys);
keys.Sort();
return keys;
}
列表sort是O(nlgn)平均情况。