Perl刚入门,研究Perl数据结构。
问题:合并两个列表(hash)成为一个大的列表(hash)
验证思路:通过使用scalar获取数组中元素的个数来判断是组成一个一维的数组(hash)还是二维的数组(hash)
答案:
数组一
my @array1 = (1,2,3);
my @array2 = ('a','b','c');
my @array3 = [@array1,@array2];
my $array4 = $array3[0];
print scalar @$array4;
# 结果是6
# @array1和@array2保存的是列表,@array3是一个列表,
#但是这个列表保存的是前面两个合并的大列表的地
# 址(一个元素),所以后面需要用$array4 = $array3[0]来取地址。
数组二
my $array1 = [1,2,3];
my $array2 = ['a','b','c'];
my @array3 = [@$array1,@$array2];
my $array4 = $array3[0];
print scalar @$array4;
# 结果是6
# @array1和@array2保存的是列表地址,@array3是一个列表,
# 但是这个列表保存的是前面两个合并的大列表的地
# 址(一个元素),所以后面需要用$array4 = $array3[0]来取地址。
# 其中my @array3 = [@$array1,@$array2];不能写做my @array3 = [$array1,$array2];
哈希一
my %hash1 = (key1 => 1, key2 => 2);
my %hash2 = (key3 => 3, key4 => 4);
my %hash3 = (%hash1, %hash2);
print scalar keys %hash3;
# 结果是4
# %hash1和%hash2保存的是hash,%hash3是一个大的hash
# 通过hash的key的个数来判断。
哈希二
my $hash1 = {key1 => 1, key2 => 2};
my $hash2 = {key3 => 3, key4 => 4};
my %hash3 = (%$hash1, %$hash2);
print scalar keys %hash3;
# 结果是4
# %hash1和%hash2保存的是hash地址,%hash3是一个大的hash
# 通过hash的key的个数来判断。my %hash3 = (%$hash1, %$hash2);不能用my %hash3 = ($hash1, $hash2);
结论:
()可以把多个数组(hash)合并成为一个一维的大数组(hash)
[]可以把多个数组合并成为一个一维的大数组
{}可以把多个hash合并成为一个一维的大hash