Vector Clojure中的向量vs.向量

Vector Clojure中的向量vs.向量,vector,clojure,Vector,Clojure,何时使用vector of创建向量,而不是vector函数。指南是否在大多数情况下使用向量,且仅出于性能原因而切换到向量 我找不到关于何时使用向量的好信息向量用于创建单个原语类型,:int,:long,:float,:double,:byte,:short,:char,或:boolean。它不允许其他类型,因为它在内部存储未绑定的值。因此,如果向量需要包含这些基本类型以外的其他类型,则不能使用的向量。但是,如果您确定向量将具有单个基元类型的数据,则可以使用的向量以获得更好的性能 user=>

何时使用
vector of
创建向量,而不是
vector
函数。指南是否在大多数情况下使用
向量
,且仅出于性能原因而切换到
向量


我找不到关于何时使用
向量
的好信息
向量
用于创建单个原语类型
:int
:long
:float
:double
:byte
:short
:char
,或
:boolean
。它不允许其他类型,因为它在内部存储未绑定的值。因此,如果向量需要包含这些基本类型以外的其他类型,则不能使用
向量。但是,如果您确定向量将具有单个基元类型的数据,则可以使用
向量以获得更好的性能

user=> (vector-of :int 1 2 3 4 5)
[1 2 3 4 5]
user=> (vector-of :double 1.0 2.0)
[1.0 2.0]
user=> (vector-of :string "hello" "world")
Execution error (IllegalArgumentException) at user/eval5 (REPL:1).
Unrecognized type :string
如您所见,您应该将基元类型指定为参数

vector
可用于创建任何类型的向量

user=> (vector 1 2.0 "hello")
[1 2.0 "hello"]
使用
vector
时,可以放置任何类型

此外,还有另一个函数
vec
,用于创建包含coll内容的新向量

user=> (vec '(1 2 3 4 5))
[1 2 3 4 5]
通常,您可以从repl获取函数/宏的基本信息,如下所示

user=> (doc vector-of)
-------------------------
clojure.core/vector-of
([t] [t & elements])
  Creates a new vector of a single primitive type t, where t is one
  of :int :long :float :double :byte :short :char or :boolean. The
  resulting vector complies with the interface of vectors in general,
  but stores the values unboxed internally.

  Optionally takes one or more elements to populate the vector.
参考:


    • 没有人真正使用过的
      向量。如果您不特别关心性能,
      vector
      就可以了,如果您非常关心性能,您通常需要一个基本数组或其他java类型。老实说,当将
      向量
      传递给任何需要普通向量或序列的对象时,我可能会偶尔遇到奇怪的障碍-也许它工作得很好,但如果它引起问题,我就不会感到惊讶。我读到了创建向量的不同方法。我想知道是否有一些准则规定了何时使用
      vector of
      而不是
      vector
      。所以,如果我要创建一个基元类型的向量,我是否总是使用
向量?我不知道是否有这方面的指南。我很清楚的一点是,
的向量是一个特殊的函数,它创建一个单一基元类型的向量。在大多数情况下,我会使用
vector
。但是如果性能很重要,如果我的数据由单个基元类型组成,我可能会尝试
vector of
。如果您使用
vector
vac
,或Clojure中除
vector of
以外的大多数其他方法来创建向量,并且您只将64位长的整数值放入其中,它们将被存储为Java
Long
对象,由于Java对象开销,这些对象通常需要24字节的存储空间,而不是64位长值所需的8字节。Clojure程序员经常这样做,因为这样做很方便,而且他们的向量也不太大,对他们来说并不重要。如果有只包含long的巨大向量,则可以使用
向量节省大量内存。