1. 程式人生 > 實用技巧 >POJ-1721 CARDS【置換群】

POJ-1721 CARDS【置換群】

set/weakset map/weakset

set用法

定義:是ES6的一種新的資料結構及(值的集合)

Set跟其他資料結構不同的地方就在於:它的值不會有重複項。


(1)使用:

1 2 3 4 let set = new Set([13,3,4,5]) set.add(3)<brdata-filtered="filtered">// add新增元素 // 獲取set中值的時候,需要先轉成陣列在取獲取 // set裡的元素是不會重複的

  

(2)size屬性獲取成員的個數。

1 2 3 //陣列的長度 //length3 console.log(set.size);//7

  

(3)delete屬性 使用者刪除Set結構中的指定值,刪除成功返回:true,刪除失敗返回:fasle。

1 2 3 4 5 6 //刪除元素 //pop //shift set.delete(32) console.log(set);

  

(4)clear方法清除所有成員

1 2 3 //清空set set.clear(); console.log(set);//set(0)

  

(5) has方法判斷set結構中是否含有指定的值。如果有,返回true;如果沒有,返回fasle。

1 2 3 //判斷是否存在 console.log(set.has(1));//true console.log(set.has(32));//false

  

(6) enteries 方法返回一個鍵值對的遍歷器。配合next使用

1 2 3 4 5 6 7 8 9 10 11 12 13 let set = new Set([1, 2, 3, 3, 3, 22, 4, 44, 444]) let set1 = set.entries(); console.log(set1.next()); console.log(set1.next());
console.log(set1.next()); console.log(set1.next()); console.log(set1.next()); console.log(set1.next()); console.log(set.keys()); console.log(set.values());

  

(7)keys和values方法

keys()方法:返回鍵名的遍歷器。
values()方法:返回鍵值的遍歷器。

1 2 console.log(set.keys()); console.log(set.values());

  

(8)foreach方法 遍歷每一個成員。

1 2 3 4 //通過foreach 遍歷 set.forEach(item=>{ console.log(item); })

  

WeakSet結構

WeakSet結構同樣不會儲存重複的值,不同的是,它的成員必須是物件型別的值。

WeakSet提供了add()方法,delete()方法,has()方法;

不會有keys(),values(),entries(),forEach()等方法和size屬性。

1 2 let weakset = new WeakSet([{name:"a"},{age:10}]);//數組裡的資料是物件 console.log(weakset);

  

map的用法:

鍵值對的集合:

使用

1 鍵可以是任何型別資料
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 let map = new Map([["key","這個鍵"]]); console.log(map); console.log(map.get("key")); //鍵可以是任何型別資料 //數字 map.set(3,"數字鍵") console.log(map.get(3)) //布林型別 map.set(true,"鍵是布林"); console.log(map.get(true)); //物件 let obj = { name: "aa" }; map.set( obj ,"物件"); //symbol let symbol = Symbol("鍵"); map.set(symbol,"鍵是symbol");

  

(1)set()方法作用:給例項設定一對鍵值對,返回map例項。 使用如上程式碼。

(2)get方法 作用:獲取指定鍵名的鍵值,返回鍵值。使用如上程式碼。

(3)delete方法 作用:刪除指定的鍵值對,刪除成功返回:true,否則返回:false。

1 2 3 //刪除 map.delete("key");// 鍵名 //判斷是否有指定鍵值對

  

(4)clear 方法 作用:一次性刪除所有鍵值對。

1 2 3 //清空鍵值對 map.clear() console.log(map)

  

(5)has方法 作用:判斷Map例項內是否含有指定的鍵值對,有就返回:true,否則返回:false。

1 2 //判斷是否有指定鍵值對 console.log(map.has(3,"數字鍵"));

  

(6)entries方法作用:返回例項的鍵值對遍歷器。

1 2 3 4 // 使用entries遍歷 for (let [key, value] of map.entries()) { console.log(key + " " + value) }

  

(7)keys和values方法

keys()方法:返回例項所有鍵名的遍歷器。
values()方法:返回例項所有鍵值的遍歷器.

1 2 3 4 5 6 7 8 //遍歷鍵名 for (let key of map.keys()) { console.log(key); } //遍歷值 for (let value of map.values()) { console.log(value); }

  

(8)forEach方法

1 map.forEach((value,key)=>{ console.log(key+":"+value)})

  

(9)size方法

size:獲取例項的成員數

Weak Map

與Map不同點在於WeakMap結構的鍵名只支援引用型別的資料 比如:陣列,物件,函式。

1 2 3 let weakmap = new WeakMap([[{name:"aaa"}]]) console.log(weakmap)

  

同樣WeakMap也擁有get、has、delete方法,用法和用途都一樣。不同地方在於,WeakMap不支援clear方法,不支援遍歷,也就沒有了keys、values、entries、forEach

這4個方法,也沒有屬性size。