Есть ли общий способ преобразования хеша в двумерный массив? - PullRequest
1 голос
/ 23 сентября 2010

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

Существует ли общий способ преобразования хэша в массив?Например, первый ключ становится столбцом 0, второй ключ - столбцом 1 и т. Д.

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

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

Ответы [ 2 ]

0 голосов
/ 23 сентября 2010

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

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

0 голосов
/ 23 сентября 2010

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

@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 : Это решение тоже выглядит красиво.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...