Lập trình D - Mảng liên kết
Mảng liên kết có chỉ mục không nhất thiết phải là số nguyên và có thể được nhập thưa thớt. Chỉ mục cho một mảng kết hợp được gọi làKeyvà loại của nó được gọi là KeyType.
Mảng liên kết được khai báo bằng cách đặt KeyType trong [] của khai báo mảng. Dưới đây là một ví dụ đơn giản cho mảng kết hợp.
import std.stdio;
void main () {
int[string] e; // associative array b of ints that are
e["test"] = 3;
writeln(e["test"]);
string[string] f;
f["test"] = "Tuts";
writeln(f["test"]);
writeln(f);
f.remove("test");
writeln(f);
}
Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:
3
Tuts
["test":"Tuts"]
[]
Khởi tạo mảng liên kết
Một khởi tạo đơn giản của mảng kết hợp được hiển thị bên dưới.
import std.stdio;
void main () {
int[string] days =
[ "Monday" : 0,
"Tuesday" : 1,
"Wednesday" : 2,
"Thursday" : 3,
"Friday" : 4,
"Saturday" : 5,
"Sunday" : 6 ];
writeln(days["Tuesday"]);
}
Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:
1
Thuộc tính của mảng liên kết
Đây là các thuộc tính của một mảng kết hợp:
Sr.No. | Kê khai tài sản |
---|---|
1 | .sizeof Trả về kích thước của tham chiếu đến mảng kết hợp; nó là 4 trong các bản dựng 32-bit và 8 trên các bản dựng 64-bit. |
2 | .length Trả về số lượng giá trị trong mảng kết hợp. Không giống như đối với mảng động, nó ở chế độ chỉ đọc. |
3 | .dup Tạo một mảng kết hợp mới có cùng kích thước và sao chép nội dung của mảng kết hợp vào đó. |
4 | .keys Trả về mảng động, các phần tử là khóa trong mảng kết hợp. |
5 | .values Trả về mảng động, các phần tử là giá trị trong mảng kết hợp. |
6 | .rehash Tổ chức lại mảng kết hợp tại chỗ để tra cứu hiệu quả hơn. rehash có hiệu lực khi, chẳng hạn, chương trình đã tải xong một bảng biểu tượng và bây giờ cần tra cứu nhanh trong đó. Trả về một tham chiếu đến mảng được sắp xếp lại. |
7 | .byKey() Trả về một đại biểu thích hợp để sử dụng làm Tổng hợp cho một ForeachStatement sẽ lặp qua các khóa của mảng kết hợp. |
số 8 | .byValue() Trả về một đại biểu thích hợp để sử dụng làm Tổng hợp cho một ForeachStatement sẽ lặp qua các giá trị của mảng kết hợp. |
9 | .get(Key key, lazy Value defVal) Tìm kiếm chìa khóa; nếu nó tồn tại trả về giá trị tương ứng, khác đánh giá và trả về defVal. |
10 | .remove(Key key) Loại bỏ một đối tượng cho khóa. |
Thí dụ
Dưới đây là một ví dụ để sử dụng các thuộc tính trên.
import std.stdio;
void main () {
int[string] array1;
array1["test"] = 3;
array1["test2"] = 20;
writeln("sizeof: ",array1.sizeof);
writeln("length: ",array1.length);
writeln("dup: ",array1.dup);
array1.rehash;
writeln("rehashed: ",array1);
writeln("keys: ",array1.keys);
writeln("values: ",array1.values);
foreach (key; array1.byKey) {
writeln("by key: ",key);
}
foreach (value; array1.byValue) {
writeln("by value ",value);
}
writeln("get value for key test: ",array1.get("test",10));
writeln("get value for key test3: ",array1.get("test3",10));
array1.remove("test");
writeln(array1);
}
Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:
sizeof: 8
length: 2
dup: ["test":3, "test2":20]
rehashed: ["test":3, "test2":20]
keys: ["test", "test2"]
values: [3, 20]
by key: test
by key: test2
by value 3
by value 20
get value for key test: 3
get value for key test3: 10
["test2":20]