Làm cách nào để phân bổ vectơ với 1042 chỉ mục trống?
Bộ nhớ có được cấp phát không?
như thế nàylàm cách nào để tạo một vectơ lớn trong clojure
(def a (array-creation-function 1042))
(def b (assoc a 1041 42))
(b 1041)
--> 42
Làm cách nào để phân bổ vectơ với 1042 chỉ mục trống?
Bộ nhớ có được cấp phát không?
như thế nàylàm cách nào để tạo một vectơ lớn trong clojure
(def a (array-creation-function 1042))
(def b (assoc a 1041 42))
(b 1041)
--> 42
Dường như các vectơ không thưa thớt nên bạn phải chỉ định giá trị cho mỗi chỉ mục khi tạo vectơ. Cách dễ nhất có vẻ là gọi (vec) trên một chuỗi.
(vec (repeat 1042 nil))
Các giá trị này không được tạo ra một cách lười biếng.
điều này yêu cầu phiên bản mới nhất của clojure để cung cấp cho các đối số 2 lặp lại –
những ngày này (2012) đây là câu trả lời đúng - bạn nên đánh dấu chính xác, arthur. –
tôi sẽ nhận lời của bạn về điều đó :) –
Nếu bạn muốn cái gì đó là không lười biếng nhưng mà tránh một số phí, bạn có thể làm:
(vec (make-array Object 1024))
Note, assoc
không thay đổi một vector, nó trả về một vectơ mới với một trong các giá trị đã thay đổi. Vectơ là không thay đổi. Mã của bạn sẽ không bao giờ hoạt động như được đăng.
cảm ơn đã chỉ ra rằng, tôi đã chỉnh sửa câu hỏi để lưu trữ mảng được trả về bởi ass –
'make-array' trả về một mảng Java, nhưng gói nó trong' vec' làm cho nó thành một vector Clojure. –
Nếu dữ liệu của bạn thưa thớt, hãy xem xét sử dụng bản đồ trống thay vì vectơ .... khi đó bạn sẽ nhận được một số lượng chỉ mục trống không được phân bổ miễn phí!
(def a {})
(def b (assoc a 1041 42))
(b 1041)
--> 42
Tôi đang tìm cách tạo vectơ clojure liên tục, không phải mảng java –