Как я могу напечатать хеш Perl в определенном порядке? - PullRequest
2 голосов
/ 13 сентября 2010

У меня есть этот код

#!/usr/bin/perl
use strict;

my @a = ("b","a","d","c");
my %h = ("a",1,"b",2,"c",3,"d",4);

#print '"' . join('","', @a), "\"\n";

print "\n";
foreach my $key (@a) {
    print '"' . $h{$key} . '",';
}
print "\n";

, который выводит

"2","1","4","3",

но я бы хотел, чтобы он только что вывел

"2","1","4","3"

Обратите внимание, что последнего ',' там нет.

Возможно ли, например, вывести хеш в определенном порядке или какой-то другой трюк, чтобы получить желаемый вывод?

Обновление:

Основываясь на ответе Фридо, я смог сделать все правильно.

print '"' . join('","', @h{@a}), "\"\n";

В ответе Фридо нет кавычек вокруг значений.

Ответы [ 3 ]

10 голосов
/ 14 сентября 2010
print join("," => map qq["$_"], @h{@a}), "\n";

В основе этой строки лежит @h{@a}, срез хеша , что означает то же, что и

($h{"b"}, $h{"a"}, $h{"d"}, $h{"c"})

Очевидным преимуществом является экономия выражения.

Перемещаясь на один уровень, мы находим оператор map: для каждого значения из @h{@a} оберните его в двойные кавычки, используя qq["$_"]. Поскольку в результате вы хотите использовать двойные кавычки, код использует qq// для переключения разделителей. В противном случае вы застряли бы с "\"$_\"" или цепочкой конкатенации, как в вашем вопросе.

Наконец, join вставляет запятые между отображаемыми значениями. В этом случае => идентично оператору запятой, но я использую его здесь вместо

join(",", ...)

, что я нахожу визуально неприятным из-за запятых, смешанных вместе.

У вас может возникнуть желание написать join без скобок, но при этом "\n" будет аргументом join, а не print.

5 голосов
/ 14 сентября 2010

Вы можете использовать срез хеша , чтобы получить значения, затем используйте join, чтобы соединить их запятыми.

print join ",", @h{@a};
3 голосов
/ 14 сентября 2010

Используйте join, чтобы поставить запятые между значениями, а не в конце, и map, чтобы заключить каждое значение в двойные кавычки.

print join(",", map { qq|"$h{$_}"| } @a);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...