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