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"。
: 是否能请教关于这两者的不同?
: 查了许多网页,得到的资料较零散,于是在此发问了。
: 如发问不妥,我会自行删除。
: 如果有版友们能热心回答,谢谢不吝赐教了。
: 感谢您们。