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