Perl - băm

Hàm băm là một tập hợp của key/valuecặp. Các biến băm được đặt trước dấu phần trăm (%). Để tham chiếu đến một phần tử duy nhất của hàm băm, bạn sẽ sử dụng tên biến băm được đặt trước dấu "$" và theo sau là "khóa" được liên kết với giá trị trong dấu ngoặc nhọn ..

Đây là một ví dụ đơn giản về việc sử dụng các biến băm -

#!/usr/bin/perl

%data = ('John Paul', 45, 'Lisa', 30, 'Kumar', 40);

print "\$data{'John Paul'} = $data{'John Paul'}\n";
print "\$data{'Lisa'} = $data{'Lisa'}\n";
print "\$data{'Kumar'} = $data{'Kumar'}\n";

Điều này sẽ tạo ra kết quả sau:

$data{'John Paul'} = 45
$data{'Lisa'} = 30
$data{'Kumar'} = 40

Tạo mã băm

Hàm băm được tạo theo một trong hai cách sau. Trong phương pháp đầu tiên, bạn chỉ định một giá trị cho một khóa được đặt tên trên cơ sở từng cái một -

$data{'John Paul'} = 45;
$data{'Lisa'} = 30;
$data{'Kumar'} = 40;

Trong trường hợp thứ hai, bạn sử dụng một danh sách, được chuyển đổi bằng cách lấy các cặp riêng lẻ từ danh sách: phần tử đầu tiên của cặp được sử dụng làm khóa và phần tử thứ hai làm giá trị. Ví dụ -

%data = ('John Paul', 45, 'Lisa', 30, 'Kumar', 40);

Để rõ ràng, bạn có thể sử dụng => làm bí danh cho, để chỉ ra các cặp khóa / giá trị như sau:

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

Đây là một biến thể nữa của biểu mẫu trên, hãy xem nó, ở đây tất cả các khóa đã được đặt trước dấu gạch ngang (-) và không cần dấu ngoặc kép xung quanh chúng -

%data = (-JohnPaul => 45, -Lisa => 30, -Kumar => 40);

Nhưng điều quan trọng cần lưu ý là có một từ duy nhất, tức là các phím không có dấu cách đã được sử dụng trong hình thức tạo băm này và nếu bạn xây dựng hàm băm của mình theo cách này thì các khóa sẽ được truy cập chỉ bằng dấu gạch nối như hình dưới đây.

$val = %data{-JohnPaul}
$val = %data{-Lisa}

Truy cập các phần tử băm

Khi truy cập các phần tử riêng lẻ từ một hàm băm, bạn phải đặt trước biến bằng dấu đô la ($) và sau đó nối khóa phần tử trong dấu ngoặc nhọn sau tên của biến. Ví dụ -

#!/usr/bin/perl

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

print "$data{'John Paul'}\n";
print "$data{'Lisa'}\n";
print "$data{'Kumar'}\n";

Điều này sẽ tạo ra kết quả sau:

45
30
40

Giải nén các lát

Bạn có thể trích xuất các lát của một hàm băm giống như bạn có thể trích xuất các lát từ một mảng. Bạn sẽ cần sử dụng tiền tố @ cho biến để lưu trữ giá trị trả về vì chúng sẽ là một danh sách các giá trị -

#!/uer/bin/perl


%data = (-JohnPaul => 45, -Lisa => 30, -Kumar => 40);

@array = @data{-JohnPaul, -Lisa};

print "Array : @array\n";

Điều này sẽ tạo ra kết quả sau:

Array : 45 30

Trích xuất các khóa và giá trị

Bạn có thể lấy danh sách tất cả các khóa từ hàm băm bằng cách sử dụng keys , có cú pháp sau:

keys %HASH

Hàm này trả về một mảng tất cả các khóa của hàm băm được đặt tên. Sau đây là ví dụ -

#!/usr/bin/perl 

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

@names = keys %data;

print "$names[0]\n";
print "$names[1]\n";
print "$names[2]\n";

Điều này sẽ tạo ra kết quả sau:

Lisa
John Paul
Kumar

Tương tự, bạn có thể sử dụng valueshàm để lấy danh sách tất cả các giá trị. Hàm này có cú pháp sau:

values %HASH

Hàm này trả về một mảng bình thường bao gồm tất cả các giá trị của hàm băm được đặt tên. Sau đây là ví dụ -

#!/usr/bin/perl 

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

@ages = values %data;

print "$ages[0]\n";
print "$ages[1]\n";
print "$ages[2]\n";

Điều này sẽ tạo ra kết quả sau:

30
45
40

Kiểm tra sự tồn tại

Nếu bạn cố gắng truy cập vào một cặp khóa / giá trị từ một hàm băm không tồn tại, thông thường bạn sẽ nhận được undefinedvà nếu bạn đã bật cảnh báo, thì bạn sẽ nhận được cảnh báo được tạo tại thời điểm chạy. Bạn có thể giải quyết vấn đề này bằng cách sử dụngexists , trả về true nếu khóa được đặt tên tồn tại, bất kể giá trị của nó có thể là gì -

#!/usr/bin/perl

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

if( exists($data{'Lisa'} ) ) {
   print "Lisa is $data{'Lisa'} years old\n";
} else {
   print "I don't know age of Lisa\n";
}

Ở đây chúng tôi đã giới thiệu câu lệnh IF ... ELSE, chúng tôi sẽ nghiên cứu trong một chương riêng. Còn bây giờ bạn cứ cho rằngif( condition ) một phần sẽ chỉ được thực thi khi điều kiện đã cho là đúng. elsemột phần sẽ được thực thi. Vì vậy, khi chúng ta thực hiện chương trình trên, nó tạo ra kết quả như sau vì ở đây điều kiện đã cho tồn tại ($ data {'Lisa'} trả về true -

Lisa is 30 years old

Nhận kích thước băm

Bạn có thể lấy kích thước - tức là số phần tử từ một hàm băm bằng cách sử dụng ngữ cảnh vô hướng trên các khóa hoặc giá trị. Nói một cách đơn giản, đầu tiên bạn phải lấy một mảng gồm các khóa hoặc giá trị và sau đó bạn có thể nhận được kích thước của mảng như sau:

#!/usr/bin/perl

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

@keys = keys %data;
$size = @keys;
print "1 - Hash size:  is $size\n";

@values = values %data;
$size = @values;
print "2 - Hash size:  is $size\n";

Điều này sẽ tạo ra kết quả sau:

1 - Hash size: is 3
2 - Hash size: is 3

Thêm và loại bỏ các phần tử trong băm

Việc thêm một cặp khóa / giá trị mới có thể được thực hiện bằng một dòng mã bằng cách sử dụng toán tử gán đơn giản. Nhưng để xóa một phần tử khỏi hàm băm, bạn cần sử dụngdelete chức năng như được hiển thị bên dưới trong ví dụ:

#!/usr/bin/perl

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);
@keys = keys %data;
$size = @keys;
print "1 - Hash size:  is $size\n";

# adding an element to the hash;
$data{'Ali'} = 55;
@keys = keys %data;
$size = @keys;
print "2 - Hash size:  is $size\n";

# delete the same element from the hash;
delete $data{'Ali'};
@keys = keys %data;
$size = @keys;
print "3 - Hash size:  is $size\n";

Điều này sẽ tạo ra kết quả sau:

1 - Hash size: is 3
2 - Hash size: is 4
3 - Hash size: is 3