Immutable.js中的Map和Seq有什么不同?你能否提供一个证明两者之间差异的例子。immutable.js:Map与Seq
0
A
回答
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。
相关问题
- 1. scala .seq与.toSeq
- 2. clojure cons vs conj与lazy-seq
- 3. seq(...)参数“length.out”与“length”
- 4. SEQ <obj>与在F#SEQ <float>
- 5. 火花:mappartition(平行)+迭代(SEQ)与同时(SEQ)+地图(平行)
- 6. F#Seq
- 7. 如何将x的seq转换为seq
- 8. Scala拼合一个Seq [Future [Seq []]]
- 9. 将Seq [Option [T]]转换为Seq [T]
- 10. seq和seq有什么区别?
- 11. Seq [A]扩展顺序[Seq [A]]
- 12. 与adhoc类型的元组的seq?
- 13. 创建序列0,0,0,0,0,1,1,1,1,1,2,2,2,2,2,3,3,3,3,4,4,4, 4,4与seq()
- 14. 与`seq`相比``评估'安全吗?
- 15. 为什么“seq -w”在for循环中不起作用,与“seq”相比?
- 16. A => Seq [B]
- 17. 插入SEQ
- 18. F#Seq diff
- 19. Onload events seq
- 20. 使用seq vectorwise
- 21. 继承自Seq
- 22. 了解Haskell seq
- 23. 修改数组的数据与seq并将数组的地址与seq传递给asyncnet处理send`
- 24. Serilog与seq无法找到System.Net.Http发布后与Windows 4.6.2
- 25. ArrayFire seq to int C++
- 26. scala.Array是一个Seq?
- 27. 滑动窗口seq
- 28. 的OutOfMemoryError在懒-SEQ
- 29. ReduceByKey + Map + Seq说明
- 30. Clojure:cons(seq)vs. conj(list)
'Seq'还具有封装底层数据结构而不是创建HAMT的额外好处。 HAMT虽然对于在进行突变时保存空间非常有用(即共享数据),但当您只想存储一些永远不会改变的数据时,性能会降低。那么在这种情况下,在'Map'上使用'Seq' – Carlo