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]