Thay đổi item của key trong Dic

Liên hệ QC

tueyennhi

Thành viên tích cực
Tham gia
18/10/10
Bài viết
1,187
Được thích
105
Em có đoạn code sau

Mã:
Dic.Add Tem, Array(Arr(i, 12), Arr(i, 13))

Em muốn thay đổi giá trị Item tại vị trí 0 em sử dụng đoạn mã sau nhưng có vẻ không thành công

Mã:
Dic(Tem)(0) = k

Mong mọi người chỉ giúp. Em xin cảm ơn!
 
Dim newArray as variant
newArray = Dic.Item(Tem)
newArray(0) = k
Dic.Item(Tem) = newArray
Theo cách này thì không phù hợp với code mình đang viết. Như vậy là không thể nào thay đổi một phần tử mảng là item của một key đúng không bạn?
Trước đó mình đã thử Dic.Item(Tem)(0) = k cũng không như ý.
 
Upvote 0
Quý vị có biết từ "immutable" trong lập trình nghĩa là gì không?
Từ này có thể tạm dịch ra tiếng Việt là "không thể chỉnh sửa". Trong lập trình, nó có thể hiểu là "không thể chỉnh sửa, chỉ có thể thay mới"
Điển hình là kiểu biến String trong VBA. String chỉ có thể thay mới chứ không thể chỉnh sửa (có ngoại lệ là dùng hàm MID)
str1 = "12345"
str1 = str1 & "abc"
VBA không thể giản dị cộng "abc" vào chuỗi có sẵn của str1. Trong bộ nhớ, str1 được định độ dài là 5 bytes. VBA không thể nới thành 8 bytes để chứa trị mới. (nới nhằm vùng nhớ của biến khác thì sao?)
Vì vậy VBA phải lập một chuỗi mới có chiều dài là 8 bytes, chép trị mới (12345abc) vào, chĩa str1 vào chỗ mới này và trả 5 bytes ban đầu lại cho hệ thống (ụ nhớ).
Các kiểu biến căn bản khác như integer, long,... dùng độ dài cố định cho nên được liệt vào loại "mutable". Khi gán trị mới thì VBA chỉ việc chép trị mới vào dùng nhớ của biến, hết.

Nếu tôi nhớ không lầm thì keys và items của dictionary được ghi theo kiểu immutable. Tức là code chỉ có thể thay mới chúng chứ không thể sửa chúng.
Tuy array là mutable (khi gán trị cho phần tử thì địa chỉ array vẫn nằm đấy) nhưng khi ghi vào item thì nó phải chịu luật immutable của dictionary. Nói cách khác, cde chỉ có thể thay thế key hoặc item chứ không thể chỉnh một phần của key hoặc item.
(lưu ý là tôi có nói "nếu nhớ không lầm". Quý vị siêng thì tìm tài liệu kiểm chứng hoặc bác bỏ. Bản thân tôi thì hiện tại lười tìm hiểu thêm về VBA quá)
 
Upvote 0
Em có đoạn code sau

Mã:
Dic.Add Tem, Array(Arr(i, 12), Arr(i, 13))

Em muốn thay đổi giá trị Item tại vị trí 0 em sử dụng đoạn mã sau nhưng có vẻ không thành công

Mã:
Dic(Tem)(0) = k

Mong mọi người chỉ giúp. Em xin cảm ơn!
Cú pháp đúng: Dic.Item(Tem) = array()
Còn vụ array 0 hay 1 thì hổng biết.
 
Upvote 0
Cú pháp đúng: Dic.Item(Tem) = array()
Còn vụ array 0 hay 1 thì hổng biết.
Không phải vậy anh. Họ muốn thay đổi giá trị TRONG item, chứ không phải thay đổi item của key.
Tức là item của key là một mảng các phần tử nào đó array(value1, value2, value3...). Giờ cần thay đổi value1 thành value1 phẩy.
 
Upvote 0
Không phải vậy anh. Họ muốn thay đổi giá trị TRONG item, chứ không phải thay đổi item của key.
Tức là item của key là một mảng các phần tử nào đó array(value1, value2, value3...). Giờ cần thay đổi value1 thành value1 phẩy.
Tôi không am tường về dic, chỉ thấy câu: Trước đó mình đã thử Dic.Item(Tem)(0) = k cũng không như ý. thì tìm hiểu biết rằng câu Dic.Item(Tem)(0) là để lấy kết quả đầu tiên của Item(Tem) chứ không dùng để sửa nó
 
Upvote 0
Web KT
Back
Top Bottom