2016-09-14 33 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