Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 是否有一种将散列转换为二维数组的通用方法?_Arrays_Perl_Hash - Fatal编程技术网

Arrays 是否有一种将散列转换为二维数组的通用方法?

Arrays 是否有一种将散列转换为二维数组的通用方法?,arrays,perl,hash,Arrays,Perl,Hash,散列的构造方式总是不同的,它可以是数组散列的散列或其他任何形式的散列。 对于散列的每一个不同结构,都需要一个不同的实现,将其转换为二维数组 是否有一种将散列转换为数组的通用方法? 例如,我可以说,第一个键变为第0列,第二个键变为第1列,等等 评论示例: $distangle{some_distance}{some_angle}=() 现在我想把散列转换成一个普通的二维数组@distangle=(一些距离,一些角度)。 这是一个方法,然后明天我有一些不同形式的散列,我还需要转换成二维数组 散列中的

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

是否有一种将散列转换为数组的通用方法? 例如,我可以说,第一个键变为第0列,第二个键变为第1列,等等

评论示例:

$distangle{some_distance}{some_angle}=()
现在我想把散列转换成一个普通的二维数组
@distangle=(一些距离,一些角度)
。 这是一个方法,然后明天我有一些不同形式的散列,我还需要转换成二维数组

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

@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:看起来也不错。

首先,散列是无序的,所以当你说“第一个键”时,没有这回事


第二,如果你有一个数组的散列(如你的例子),那么在我看来,将其减少为二维数组的严格要求将导致数据丢失(假设你的意思是该数组中没有一个元素可以是hashrefs或arrayrefs)。

$cars{type}{color}{number}=155;在这个例子中,“type”是第一个键。应该使用花括号通过hash中的键
$hash{$key}
获取值。不是二维的,这只是为了演示我所说的第一个键。@Hermann你想从
$cars{type}{color}{number}
中获取什么数组?你想实现什么?我有各种不同的散列,我经常把它们转换成二维数组,因此我做了很多次同样的事情。$cars{type}{color}{number}=155;在这个例子中,“type”是第一个键。是的,这样转换时数据丢失是一个问题。啊,好的。您发布的示例有助于解释问题。键如何“变成”列?你的问题没有明确定义。你说的是网格吗?你想解决什么问题?也许有更好的办法。总是从你想要完成的事情开始,而不是从你认为你应该怎么做开始。请参阅上的Perlmonks writeup。@axeman:散列是存储信息的一种方式,数组是另一种方式。所以当我转换散列时,它的键是信息的一部分,所以我把它放在数组中。我说的是二维数组。@brian我试图用一个解决方案将各种类型的散列转换成二维数组。不,这是你的解决方案。我想知道你的问题是什么。您的开始状态和期望的结束状态是什么?忘掉你认为的解决方案,只是解释一下任务。