【问题标题】:clojure: O(1) time to get size of vectorclojure: O(1) 时间来获取向量的大小
【发布时间】:2012-06-09 08:45:27
【问题描述】:

上下文

(doc count)
-------------------------
clojure.core/count
([coll])
  Returns the number of items in the collection. (count nil) returns
  0.  Also works on strings, arrays, and Java Collections and Maps

问题

计数是否保证在向量上是常数时间?

如果没有,有没有办法在常数时间内得到向量的大小?

更多上下文

我实际上想获取向量的列表元素,假设我知道向量的大小,我可以在 O(1) 中用 nth 做到这一点。

编辑:

我忘了提这个。我需要它来处理 transient 向量。

【问题讨论】:

    标签: clojure


    【解决方案1】:

    是的,计数在向量上总是很快的。但是你可以调用peek 来获取它的最后一个元素。

    【讨论】:

    • 我没有说清楚是我的错:它实际上是一个 transient 向量。由于没有临时列表,我正在使用 conj!,pop! -- 但我需要一种方法来读取最后一个元素。
    • 如果它是一个瞬态向量,它应该完全在您的控制范围内,其中包含或添加了哪些元素(即没有人应该只向您传递一个随机瞬态向量)。因此,如果很难做到,请单独跟踪哪个是最后一个。
    猜你喜欢
    • 2016-10-04
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多