Perl 哈希
哈希是 key/value 對的集合。
Perl中哈希變數以百分號 (%) 標記開始。
訪問哈希元素格式:${key}。
以下是一個簡單的哈希實例:
實例
#!/usr/bin/perl%data = ("google", "google.com", "runoob", "runoob.com", "taobao", "taobao.com");
print"$data{"google"} = $data{"google"}
";print"$data{"runoob"} = $data{"runoob"}
";print"$data{"taobao"} = $data{"taobao"}
";
執行以上程序,輸出結果為:
創建哈希
創建哈希可以通過以下兩種方式:
一、為每個 key 設置 value
$data{"google"} = "google.com";$data{"runoob"} = "runoob.com";$data{"taobao"} = "taobao.com";
二、通過列表設置
列表中第一個元素為 key,第二個為 value。
%data = ("google", "google.com", "runoob", "runoob.com", "taobao", "taobao.com");
也可以使用 => 符號來設置 key/value:
%data = ("google"=>"google.com", "runoob"=>"runoob.com", "taobao"=>"taobao.com");
以下實例是上面實例的變種,使用 - 來代替引號:
%data = (-google=>"google.com", -runoob=>"runoob.com", -taobao=>"taobao.com");
使用這種方式 key 不能出現空格,讀取元素方式為:
$val = $data{-google}$val = $data{-runoob}
訪問哈希元素
訪問哈希元素格式:${key},實例如下:
實例
#!/usr/bin/perl%data = ("google"=>"google.com", "runoob"=>"runoob.com", "taobao"=>"taobao.com");
print"$data{"google"} = $data{"google"}
";print"$data{"runoob"} = $data{"runoob"}
";print"$data{"taobao"} = $data{"taobao"}
";
執行以上程序,輸出結果為:
讀取哈希值
你可以像數組一樣從哈希中提取值。
哈希值提取到數組語法格式:@{key1,key2}。
實例
#!/uer/bin/perl%data = (-taobao =>45, -google =>30, -runoob =>40);
@array = @data{-taobao, -runoob};
print"Array : @array
";
執行以上程序,輸出結果為:
Array : 45 40
讀取哈希的 key 和 value
讀取所有key
我們可以使用 keys 函數讀取哈希所有的鍵,語法格式如下:
keys %HASH
該函數返回所有哈希的所有 key 的數組。
實例
#!/usr/bin/perl %data = ("google"=>"google.com", "runoob"=>"runoob.com", "taobao"=>"taobao.com");
@names = keys%data;
print"$names[0]
";print"$names[1]
";print"$names[2]
";
執行以上程序,輸出結果為:
taobao
google
runoob
類似的我們可以使用 values 函數來讀取哈希所有的值,語法格式如下:
values %HASH
該函數返回所有哈希的所有 value 的數組。
實例
#!/usr/bin/perl %data = ("google"=>"google.com", "runoob"=>"runoob.com", "taobao"=>"taobao.com");
@urls = values%data;
print"$urls[0]
";print"$urls[1]
";print"$urls[2]
";
執行以上程序,輸出結果為:
taobao.com
runoob.com
google.com
檢測元素是否存在
如果你在哈希中讀取不存在的 key/value 對 ,會返回 undefined 值,且在執行時會有警告提醒。
為了避免這種情況,我們可以使用 exists 函數來判斷key是否存在,存在的時候讀取:
實例
#!/usr/bin/perl%data = ("google"=>"google.com", "runoob"=>"runoob.com", "taobao"=>"taobao.com");
if(exists($data{"facebook"})){print"facebook 的網址為 $data{"facebook"}
";}else{print"facebook 鍵不存在
";}
執行以上程序,輸出結果為:
facebook 鍵不存在
以上代碼中我們使用了 IF...ELSE 語句,在後面的章節我們會具體介紹。
獲取哈希大小
哈希大小為元素的個數,我們可以通過先獲取 key 或 value 的所有元素數組,再計算數組元素多少來獲取哈希的大小,實例如下:
實例
#!/usr/bin/perl%data = ("google"=>"google.com", "runoob"=>"runoob.com", "taobao"=>"taobao.com");
@keys = keys%data;$size = @keys;print"1 - 哈希大小: $size
";
@values = values%data;$size = @values;print"2 - 哈希大小: $size
";
執行以上程序,輸出結果為:
1 - 哈希大小: 32 - 哈希大小: 3
哈希中添加或刪除元素
添加 key/value 對可以通過簡單的賦值來完成。但是刪除哈希元素你需要使用 delete 函數:
實例
#!/usr/bin/perl%data = ("google"=>"google.com", "runoob"=>"runoob.com", "taobao"=>"taobao.com");@keys = keys%data;$size = @keys;print"1 - 哈希大小: $size
";
# 添加元素$data{"facebook"} = "facebook.com";@keys = keys%data;$size = @keys;print"2 - 哈希大小: $size
";
# 刪除哈希中的元素delete$data{"taobao"};@keys = keys%data;$size = @keys;print"3 - 哈希大小: $size
";
執行以上程序,輸出結果為:
1 - 哈希大小: 32 - 哈希大小: 43 - 哈希大小: 3


TAG:程序員小新人學習 |