更新不可变向量的元素 - 向量集

时间:2016-07-17 12:06:33

标签: racket

我使用向量构建用于实现动态程序的表,它涉及按顺序更新向量的每个元素。但为什么不可变向量没有apt-get update apt-get install -y xorg xvfb firefox dbus-x11 xfonts-100dpi xfonts-75dpi xfonts-cyrillic ?可变向量只有vector-set,但我们可以看到vector-set!dict-set用于不可变和可变字典,还有dict-set!hash-set对于不可变和可变的哈希表。

1 个答案:

答案 0 :(得分:3)

缺少vector-set的原因是为了防止人们在没有意识到操作的情况下无意中使用它O(n)而不是O(1)。由于vector-set!O(1),因此某人不可能犯这个错误。

此外,在真正需要时编写vector-set很简单:

#lang racket

(define (vector-set v i o)
  (vector->immutable-vector
   (for/vector ([j (in-range (vector-length v))])
     (if (= i j)
         o
         (vector-ref v j)))))

(vector-set (vector-immutable 10 11 12 13) 2 'a)

输出:

'#(10 11 a 13)