【问题标题】:Accessing ImmutableJS OrderedSet()访问 ImmutableJS OrderedSet()
【发布时间】:2016-03-19 06:52:18
【问题描述】:

使用 ImmutableJS,文档需要工作和实际工作示例。

const a = [["a"],["b"],["c"]]
const b = Immutable.List(a)
const c = Immutable.OrderedSet(a)

b.first()   // => "a"
b.get(1)    // => "b"
c.first()   // => ["a"]
c.get(1)    // => undefined !uh oh!
c.toList().get(1) // => "b" !indirect!

问题:如何打印 .OrderedSet c 的第二个元素而不将其转换为 .List 或循环整个列表?

【问题讨论】:

标签: immutable.js


【解决方案1】:

你可以这样做:

// using some ES6 features
let ordSet = immutable.OrderedSet([1, 2, 3]) 
let iterator = ordSet[Symbol.iterator] // get iterator to the collection
iterator.next() // 1 
iterator.next() // 2
iterator.next() // 3 

这就是说,让我注意即使这不是最好的语法,从性能的角度来看,它是最好的:OrderedSet 不提供对其元素的随机访问,每个元素只记住它的后继和前任。因此,获取n-th 元素需要n 跃点,无论 immutable.js 是否为它提供了一些花哨的帮助。 AFAIK,如果add / delete 应该保持快速,那么 OrderedSet 的这种类似链表的实现是不可避免的。

【讨论】:

  • 这将我们引向linked list vs array vs HashSet vs TreeMap vs HashMap vs [插入您最喜欢的列表]的古老问题,每个都有自己的add / delete 基准
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多