是否有将哈希转换为二维数组的一般方法?

时间:2010-09-23 13:51:36

标签: arrays perl hash

构造散列的方式总是可以变化的,它可以是数组散列的散列或其他。 对于散列的每个不同结构,需要有一个不同的实现,将其转换为二维数组。

是否有将哈希转换为数组的一般方法? 例如,我可以说,第一个键变为第0列,第二个键第1列等。

评论示例:

$distangle{some_distance}{some_angle}=(); 现在我想将哈希的散列转换为普通的二维数组@distangle=(some_distance,some_angle)。 这是一种方法,然后明天我有一些不同形式的哈希我也需要转换为二维数组。

2 个答案:

答案 0 :(得分:0)

哈希中的“第一个”键是什么?钥匙没有订购。你想按字母顺序排序吗?

@arr = map { $hash{$key} } sort keys %hash;

修改

OP想要一个2D数组,所以这里是:

@arr = ()
for $first (keys %hash) {
    for $second (keys %{ $hash{$first} }) {
        for $third (keys %{ $hash{$first}{$second} }) {
            my $value = $hash{$first}{$second}{$third};
            push @arr, ($first, $second, $third, $value);

这样的东西?

编辑2 This solution看起来也不错。

答案 1 :(得分:0)

首先,哈希是无序的,所以当你说“第一把钥匙”时,就没有这样的东西了。

其次,如果你确实有一个数组散列哈希(如你的例子),那么在我看来,将它减少到一个二维数组的严格要求将导致数据丢失(假设你的意思该数组中的所有元素都不能是hashrefs或arrayrefs。