Re: [問題] Hash of array / Array of hash

作者: lgen7604   2017-05-24 00:33:04
Array of Hash 中文為「Hash 的 Array」
用比較長的形容就是「用 Hash 作為元素組成的 Array」
所以 Array 中包含的每個元素都是一個 Hash
But, Array 的元素只能存 scalar 不能存 Hash 啊
這怎麼辦! 在 Perl 會改為存 Hash 的 reference
類似下列的例子
%hash1 = ("k0" => "v0", "k1" => "v1", "k2" => "v2")
%hash2 = ("k3" => "v3", "k4" => "v4")
array @a
┌───┐ ┌─┬─┬─┬─┬─┬─┐
│$a[0] ├→│k0│v0│k1│v1│k2│v2│ $a[0] = \%hash1
│ │ └─┴─┴─┴─┴─┴─┘
├───┤ ┌─┬─┬─┬─┐
│$a[1] ├→│k3│v3│k4│v4│$a[1] = \%hash2
│ │ └─┴─┴─┴─┘
├───┤
│......│
同理 Hash of Array 中文為「Array 的 Hash」
Hash 是 key/value pair
這裡通常指的是 Hash 的 value 儲存的是一個 Array
But, key/value 都只能存 scalar 啊!
這裡一樣利用 reference 的技巧
把 array 的 reference 存進 value
類似下列的例子
@a = ("a0", "a1", "a2", "a3")
@b = ("b0", "b1", "b2")
hash %h
┌─┬───┐ ┌─┬─┬─┬─┐
│k0│$h{k0}├→│a0│a1│a2│a3│ $h{k0} = \@a
│ │ │ └─┴─┴─┴─┘
├─┼───┤ ┌─┬─┬─┐
│k1│$h{k1}├→│b0│b1│b2│ $h{k1} = \@b
│ │ │ └─┴─┴─┘
├─┼───┤
│ ...... │
不知道這樣看起來有沒有清楚
※ 引述《aresnmars (哎喲)》之銘言:
: 請教各位版友:
: 小弟是初學Perl的新手。
: 想請教各位版友們常見的問題:
: "Hash of array" 以及 "Array of hash"。
: 是否能請教關於這兩者的不同?
: 查了許多網頁,得到的資料較零散,於是在此發問了。
: 如發問不妥,我會自行刪除。
: 如果有版友們能熱心回答,謝謝不吝賜教了。
: 感謝您們。
作者: aresnmars (哎喲)   2017-05-24 04:17:00
我正努力的消化中。 謝謝您這樣熱心的講解!
作者: herculus6502 (金麟豈是池中物)   2017-05-24 05:01:00
嘩這圖要畫多久啊!推一個
作者: aresnmars (哎喲)   2017-05-24 05:03:00
感謝lgen大解說.所以HoA的關鍵在於value以array存,對嗎
作者: lgen7604   2017-05-24 21:57:00
value存的是reference,類似「Array的指標」這樣的觀念因為主要是解釋HoA和AoH的架構,就沒有深入解釋reference想再深入了解reference的話,版上或網路也有很多資料
作者: cutekid (可愛小孩子)   2017-05-25 14:04:00
推喔(Y)

Links booklink

Contact Us: admin [ a t ] ucptt.com