私はベクトルを使って動的プログラミングプログラムを実装するためのテーブルを作成しています。しかし、なぜ不変ベクトルのためにvector-set
がないのですか?可変ベクトルの場合はvector-set!
しかありませんが、不変および変更可能な辞書の場合はdict-set
とdict-set!
、さらに不変および変更可能なハッシュテーブルの場合はhash-set
とhash-set!
です。不変ベクトルの更新要素
1
A
答えて
2
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)
+0
答えをありがとう! – fluter
関連する問題
- 1. ベクトル要素の値を変更する
- 2. ポインタを介してベクトルの要素を更新する
- 3. 更新要素
- 4. Rのベクトルの要素をただちに変更する
- 5. C++ベクトル要素の消去と新しいベクトルの作成
- 6. 不変のベクトルの不変のサブベクトル
- 7. 要素がベクトル
- 8. ベクトルの文字列 - 変数の更新
- 9. ベクトル要素のループ、要素が行列
- 10. 変更可能なベクトルと不変のベクトル演算の最適化
- 11. jQueryの更新フォーム要素
- 12. JPA ElementCollectionの更新要素
- 13. 要素を変更した後にhtml要素を更新する方法
- 14. HTML内の要素スタイルの変更/更新
- 15. NoUisliderブロック要素の不透明度を変更
- 16. 私は要素のベクトルを持つベクトル
- 17. 要素プロパティの変更後にアイアンリストが更新されない
- 18. 状態の変更時に要素が更新されない
- 19. 変更HTML要素
- 20. 変更ルート要素
- 21. 要素を不変のマップにプッシュ
- 22. 更新DOM要素電子
- 23. クラス要素をインタフェース要素に変更
- 24. 不要なmysql列の更新
- 25. R:ベクトルの番号要素
- 26. 要素ごとのベクトル化
- 27. ベクトル要素IDのC++
- 28. のiframe内の内容を変更したり削除不要な要素
- 29. d3 +バックボーン:データが変更された要素を更新する
- 30. 更新クエリの不必要な更新を避ける
そうだね、何の機能 'ベクトル-set'操作でそこに構築されていません。しかし、これを直接サポートする永続的なベクトルを提供するライブラリがあります。たとえば、[pvector](http://docs.racket-lang.org/pvector/index.html)ライブラリは、[set-nth](http://docs.racket-lang.org/collections/collections- api.html#%28def ._%28%28lib._data%2Fcollection..rkt%29._set-nth%29%29)と[update-nth](http://docs.racket-lang.org/collections /collections-api.html#%28def._%28%28lib._data%2Fcollection..rkt%29._update-nth%29%29)機能の更新を行います。 –
@AlexKnauthはい、pvectorに感謝しますが、なぜですか?その理由は「ベクトルセット」を持つことができなかった。 – fluter
'pvector'ライブラリは、それがどのように構造化されているかによって、ベクトル全体をコピーして機能的に更新する必要はありません。しかし組み込みのベクトルはその構造を持たないので、組み込みのベクトル*上の関数 'ベクトル集合 'は全体をコピーする必要があります。それはなぜ除外されたのかの一部かもしれませんが、わかりません。 –