0

我有一个字典,我想在这个字典中按值搜索,而不是按键:-)。我想这样做是因为 JS 中的字典没有重复的键。我需要让我的程序有重复的键,但从不重复值。

例子:

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);

现在我想按值查找键,因为我在这个结果中有值。

那么 Dictionary 可以接受 Javascript 中的重复键吗?

4

1 回答 1

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;
}

列表排序是 O(nlgn) 的平均情况。

于 2013-07-18T00:16:41.750 回答