我剛剛使用TypeScript,並試圖實現一個hashmap/dictionary接口。到目前爲止,我有TypeScript散列表/字典接口
export interface IHash {
[details: string] : string;
}
我在理解這個語法究竟意味着什麼有些麻煩。如果我要這樣做var x : IHash = {};
我將如何去添加/訪問數據?
我剛剛使用TypeScript,並試圖實現一個hashmap/dictionary接口。到目前爲止,我有TypeScript散列表/字典接口
export interface IHash {
[details: string] : string;
}
我在理解這個語法究竟意味着什麼有些麻煩。如果我要這樣做var x : IHash = {};
我將如何去添加/訪問數據?
就像一個正常的JS對象:
let myhash: IHash = {};
myhash["somestring"] = "value"; //set
let value = myhash["somestring"]; //get
有你與[indexer: string] : string
作爲替代,有一個Map
類:
let map = new Map<string, string>();
map.set("key", "value");
map.get("key"); // value
這可以讓你有任何對象(而不僅僅是數量/串)爲重點。
雖然它比較新,所以如果您定位舊系統,您可能需要對其進行填充。
var x : IHash = {};
x['key1'] = 'value1';
x['key2'] = 'value2';
console.log(x['key1']);
// outputs value1
console.log(x['key2']);
// outputs value2
如果你想通過你的字典迭代,你可以使用。
Object.keys(x).forEach((key) => {console.log(x[key])});
Object.keys返回一個對象的所有屬性,所以它很適合返回字典樣式對象中的所有值。
你也提到了你的問題中的散列表,上面的定義是針對字典樣式的界面。因此,這些鍵將是唯一的,但值不會。
只需將相同的值分配給密鑰及其值,就可以像使用哈希集合一樣使用它。
如果您希望密鑰具有唯一性並且可能具有不同的值,那麼您只需在添加對象之前檢查對象是否存在。
var valueToAdd = 'one';
if(!x[valueToAdd])
x[valueToAdd] = valueToAdd;
或者你可以建立你自己的類來充當各種哈希集。
Class HashSet{
private var keys: IHash = {};
private var values: string[] = [];
public Add(key: string){
if(!keys[key]){
values.push(key);
keys[key] = key;
}
}
public GetValues(){
// slicing the array will return it by value so users cannot accidentally
// start playing around with your array
return values.slice();
}
}
在Stack Overflow上添加關於您的解決方案應該工作原因的解釋是很好的做法。有關更多信息,請閱讀[如何回答](// stackoverflow.com/help/how-to-answer)。 –