2010-09-23 3 views
1

Способ структурирования хеша может всегда меняться, это может быть хэш хеша массива или что-то еще. И для каждой другой структуры хеша должна быть другая реализация превращения ее в двумерный массив.Есть ли общий способ преобразования хэша в двумерный массив?

Есть ли общий способ преобразования хэша в массив? такой, что я мог бы сказать, например, первый ключ становится столбец 0, второй столбец ключа 1 и т.д.

Пример из комментариев:

$distangle{some_distance}{some_angle}=(); теперь я хочу, чтобы преобразовать этот хэш хэшей в обычный двухмерный массив @distangle=(some_distance,some_angle). Это метод, затем завтра у меня есть другая форма хэша. Мне также нужно преобразовать в двумерный массив.

+1

Как сделать * ключи * "стать" * столбцами *? Ваша проблема не определена. Вы говорите о * сетке *? – Axeman

+2

В чем проблема, которую вы пытаетесь решить? Вероятно, есть лучший способ сделать это. Всегда начинайте с того, что вы пытаетесь выполнить, а не как вы думаете, что вы должны это делать. См. Запись в Perlmonks по [XY Problems] (http://www.perlmonks.org/index.pl?node_id=542341). –

+0

@axeman: hash - один из способов хранения информации, массив - другой. поэтому, когда я конвертирую хэш, тогда его ключи являются частью информации, поэтому я помещаю ее в массив. im говоря о двухмерных массивах. –

ответ

0

Что такое «первый» ключ в хеше? Клавиши не упорядочены. Вы хотите заказать их в алфавитном порядке?

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

EDIT:

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); 

Что-то вроде этого?

EDIT 2: This solution также выглядит хорошо.

+0

$ cars {type} {color} {number} = 155; в этом, «тип» является первым ключом. –

+0

Должен использовать фигурные скобки для получения значения с помощью ключа '$ hash {$ key}' в хеше. –

+0

@Ivan - спасибо, что исходит от Python ;-) – eumiro

0

Во-первых, хеши неупорядочены, поэтому, когда вы говорите «первый ключ», такой вещи нет.

Во-вторых, если у вас есть хэш массивов массивов (как в вашем примере), то мне кажется, что строгое требование о его сокращении до двумерного массива приведет к потере данных (если вы означает, что ни один из элементов в этом массиве не может быть hashrefs или arrayrefs).

+0

$ cars {type} {color} {number} = 155; в этом, «тип» является первым ключом. Да, передача данных является проблемой при преобразовании. –

+0

А, ок. Пример, который вы опубликовали, помогает объяснить ситуацию. – ishnid

Смежные вопросы