Perl - แฮช

แฮชคือชุดของ key/valueคู่ ตัวแปรแฮชนำหน้าด้วยเครื่องหมายเปอร์เซ็นต์ (%) ในการอ้างถึงองค์ประกอบเดียวของแฮคุณจะต้องใช้ชื่อตัวแปรแฮที่นำหน้าด้วยเครื่องหมาย "$" และตามด้วย "คีย์" ที่เกี่ยวข้องกับค่าในวงเล็บปีกกา ..

นี่คือตัวอย่างง่ายๆของการใช้ตัวแปรแฮช -

#!/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";

สิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้ -

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

การสร้างแฮช

แฮชถูกสร้างขึ้นด้วยหนึ่งในสองวิธีต่อไปนี้ ในวิธีแรกคุณกำหนดค่าให้กับคีย์ที่ตั้งชื่อทีละรายการ -

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

ในกรณีที่สองคุณใช้รายการซึ่งแปลงโดยการรับคู่แต่ละคู่จากรายการ: องค์ประกอบแรกของคู่ใช้เป็นคีย์และรายการที่สองเป็นค่า ตัวอย่างเช่น -

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

เพื่อความชัดเจนคุณสามารถใช้ => เป็นนามแฝงเพื่อระบุคู่คีย์ / ค่าดังต่อไปนี้ -

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

นี่คืออีกหนึ่งรูปแบบที่แตกต่างกันของรูปแบบข้างต้นลองดูที่นี่คีย์ทั้งหมดนำหน้าด้วยยัติภังค์ (-) และไม่จำเป็นต้องมีใบเสนอราคารอบตัว -

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

แต่สิ่งสำคัญคือต้องทราบว่ามีคำเดียวกล่าวคือไม่มีการใช้คีย์ช่องว่างในรูปแบบของแฮชนี้และหากคุณสร้างแฮชด้วยวิธีนี้คีย์จะเข้าถึงได้โดยใช้ยัติภังค์เท่านั้นดังที่แสดงด้านล่าง

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

การเข้าถึงองค์ประกอบแฮช

เมื่อเข้าถึงแต่ละองค์ประกอบจากแฮชคุณต้องนำหน้าตัวแปรด้วยเครื่องหมายดอลลาร์ ($) จากนั้นต่อท้ายคีย์องค์ประกอบภายในวงเล็บปีกกาหลังชื่อของตัวแปร ตัวอย่างเช่น -

#!/usr/bin/perl

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

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

สิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้ -

45
30
40

การแยกชิ้นส่วน

คุณสามารถแยกชิ้นส่วนของแฮชได้เช่นเดียวกับที่คุณสามารถแยกชิ้นส่วนจากอาร์เรย์ คุณจะต้องใช้ @ นำหน้าสำหรับตัวแปรเพื่อเก็บค่าที่ส่งคืนเนื่องจากจะเป็นรายการของค่า -

#!/uer/bin/perl


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

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

print "Array : @array\n";

สิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้ -

Array : 45 30

การแยกคีย์และค่า

คุณสามารถรับรายการคีย์ทั้งหมดจากแฮชได้โดยใช้ keys ซึ่งมีไวยากรณ์ต่อไปนี้ -

keys %HASH

ฟังก์ชันนี้ส่งคืนอาร์เรย์ของคีย์ทั้งหมดของแฮชที่มีชื่อ ต่อไปนี้เป็นตัวอย่าง -

#!/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";

สิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้ -

Lisa
John Paul
Kumar

คุณสามารถใช้ไฟล์ valuesเพื่อรับรายการค่าทั้งหมด ฟังก์ชันนี้มีไวยากรณ์ต่อไปนี้ -

values %HASH

ฟังก์ชันนี้ส่งคืนอาร์เรย์ปกติที่ประกอบด้วยค่าทั้งหมดของแฮชที่ตั้งชื่อ ต่อไปนี้เป็นตัวอย่าง -

#!/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";

สิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้ -

30
45
40

กำลังตรวจสอบการมีอยู่

หากคุณพยายามเข้าถึงคู่คีย์ / ค่าจากแฮชที่ไม่มีอยู่โดยปกติคุณจะได้รับไฟล์ undefinedค่าและหากคุณเปิดคำเตือนคุณจะได้รับคำเตือนที่สร้างขึ้นในขณะทำงาน คุณสามารถแก้ไขปัญหานี้ได้โดยใช้ไฟล์exists ฟังก์ชันซึ่งจะคืนค่าจริงหากคีย์ที่ตั้งชื่อมีอยู่โดยไม่คำนึงถึงค่าของมัน -

#!/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";
}

ที่นี่เราได้แนะนำคำสั่ง IF ... ELSE ซึ่งเราจะศึกษาในบทที่แยกต่างหาก สำหรับตอนนี้คุณเพียงแค่สมมติว่าif( condition ) ส่วนจะดำเนินการก็ต่อเมื่อเงื่อนไขที่กำหนดเป็นจริงอย่างอื่น elseส่วนหนึ่งจะถูกดำเนินการ ดังนั้นเมื่อเรารันโปรแกรมข้างต้นมันจะสร้างผลลัพธ์ต่อไปนี้เนื่องจากเงื่อนไขที่กำหนดมีอยู่ ($ data {'Lisa'}ส่งคืนจริง -

Lisa is 30 years old

การรับขนาดแฮช

คุณสามารถรับขนาด - นั่นคือจำนวนองค์ประกอบจากแฮชโดยใช้บริบทสเกลาร์กับคีย์หรือค่า พูดง่ายๆว่าก่อนอื่นคุณต้องได้รับอาร์เรย์ของคีย์หรือค่าจากนั้นคุณจะได้ขนาดของอาร์เรย์ดังนี้ -

#!/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";

สิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้ -

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

เพิ่มและลบองค์ประกอบในแฮช

การเพิ่มคู่คีย์ / ค่าใหม่สามารถทำได้ด้วยโค้ดหนึ่งบรรทัดโดยใช้ตัวดำเนินการกำหนดแบบง่าย แต่ในการลบองค์ประกอบออกจากแฮชคุณต้องใช้delete ฟังก์ชันดังแสดงด้านล่างในตัวอย่าง -

#!/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";

สิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้ -

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