2016-09-14 31 views

回答

1

Immutable的Map是一個無序的Iterable.Keyed它由(key, value)對組成。

// create a Map() 
const map = Map({a: 1, b: 'Hello'}); 
// get a value for a specific key 
console.log(map.get('b')); 
> "Hello" 
// set a new value and assign it to a new Map() 
const newMap = map.set('c', 'This is a new key/value pair'); 
console.log(newMap.get('c')); 
> "This is a new key/value pair" 

它提供了訪問的各種方法,如setIn()deleteIn()merge()map()等。它也可以轉換爲其他不可變數據類型。您可以看到the docs about all of these methods.

不可變的Seq是一個不需要具有基礎數據結構的可迭代序列值。這是從Map的第一個主要區別,你可以在自己的定義,看到這一點:

class Map<K, V> extends Collection.Keyed<K, V>

雖然:

class Seq<K, V> extends Iterable<K, V>

從右邊開始就可以看出,Seq不有鍵控值,與Map的主要區別。另一個主要區別是,您不能追加,更新或刪除Seq結構中的元素。

In addition, to quote Lee Byron:

甲SEQ是一個懶惰操作表示。你可以把它看作是前一個Iterable的一個非常輕量級的容器,並且可以應用一些操作(映射,過濾器等),該操作僅在需要獲取值時應用。 Seq本身不存儲任何值。

因爲Seq是輕量級的,所以對某些邏輯鏈來說可以是相當高效的。該文檔還指出,它通常用於爲JavaScript Object提供豐富的集合API。

+0

'Seq'還具有封裝底層數據結構而不是創建HAMT的額外好處。 HAMT雖然對於在進行突變時保存空間非常有用(即共享數據),但當您只想存儲一些永遠不會改變的數據時,性能會降低。那麼在這種情況下,在'Map'上使用'Seq' – Carlo