作者lgen7604 ()
看板Perl
标题Re: [问题] Hash of array / Array of hash
时间Wed May 24 00:33:04 2017
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"。
: 是否能请教关於这两者的不同?
: 查了许多网页,得到的资料较零散,於是在此发问了。
: 如发问不妥,我会自行删除。
: 如果有版友们能热心回答,谢谢不吝赐教了。
: 感谢您们。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.195.203.107
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Perl/M.1495557187.A.CA8.html
1F:→ aresnmars: 我正努力的消化中。 谢谢您这样热心的讲解! 05/24 04:17
2F:推 herculus6502: 哗这图要画多久啊!推一个 05/24 05:01
3F:→ aresnmars: 感谢lgen大解说.所以HoA的关键在於value以array存,对吗 05/24 05:03
4F:→ lgen7604: value存的是reference,类似「Array的指标」这样的观念 05/24 21:57
5F:→ lgen7604: 因为主要是解释HoA和AoH的架构,就没有深入解释reference 05/24 21:58
6F:→ lgen7604: 想再深入了解reference的话,版上或网路也有很多资料 05/24 21:59
7F:推 cutekid: 推喔(Y) 05/25 14:04