Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

soft hash

1 view
Skip to first unread message

Mikhail Stakhanov

unread,
Apr 6, 2019, 12:04:58 PM4/6/19
to
Здравствуйте, All!

Помогите хешь отсортировать:
$VAR1 = {
'ap190325.zip' => [
'2'
],
'z2daily.080' => [
'8'
],
'files.bbs' => [
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8'
],
'z2daily.074' => [
'8'
],
'ap190403.zip' => [
'2'
]
};

Хешь вида {key}[0..n] (имя файла и номер каталога). Нужна сортировка по {key}.
Хотя можно выделять массив на начальную букву, его сортировать и запихивать в
файл. Но всеравно в качестве развития как по {key} такой хеш сортируется ?


Всего наилучшего, Mikhail

Mikhail Stakhanov

unread,
Apr 6, 2019, 7:39:58 PM4/6/19
to
Здравствуйте, Mikhail!

Ответ на сообщение Mikhail Stakhanov (2:5020/932.1) к All, написанное 06
апр 19 в 18:39:
Мне всеравно интересно но задачу я решил для себя.

MS> Помогите хешь отсортировать:
MS> Хешь вида {key}[0..n] (имя файла и номер каталога). Нужна сортировка
MS> по {key}. Хотя можно выделять массив на начальную букву, его
MS> сортировать и запихивать в файл. Но всеравно в качестве развития как
MS> по {key} такой хеш сортируется ?

foreach my $key (sort keys %files) {
foreach my $letter ("a".."z") {
if ($key =~ /^$letter/) {
my $count=@{$files{$key}};
for (my $i=0; $i<$count;$i++) {
$files_letter[$out_ind+$i][0]=$key;
$files_letter[$out_ind+$i][1]=$files{$key}[$i];
}
$out_ind +=$count;
}
}
}
Я понял что я не умею работать с данными :)

Всего наилучшего, Mikhail

Gennadij Pastuhov

unread,
Apr 6, 2019, 8:19:58 PM4/6/19
to
Рад всех приветствовать! А особенно - Mikhail!

Суббота апреля 06 19 18:39 Mikhail Stakhanov писал к All:

MS> Помогите хешь отсортировать:
MS> $VAR1 = {
MS> 'ap190325.zip' => [
MS> '2'
MS> ],
MS> 'z2daily.080' => [
MS> '8'
MS> ],
MS> 'files.bbs' => [
MS> '1',
MS> '2',
MS> '3',
MS> '4',
MS> '5',
MS> '6',
MS> '7',
MS> '8'
MS> ],
MS> 'z2daily.074' => [
MS> '8'
MS> ],
MS> 'ap190403.zip' => [
MS> '2'
MS> ]
MS> };

MS> Хешь вида {key}[0..n] (имя файла и номер каталога). Нужна сортировка
MS> по {key}. Хотя можно выделять массив на начальную букву, его
MS> сортировать и запихивать в файл. Но всеравно в качестве развития как
MS> по {key} такой хеш сортируется ?

Ты же уже написал: sort keys %hash

... Jonny wanna live

Eugene Grosbein

unread,
Apr 6, 2019, 10:29:58 PM4/6/19
to
06 апр. 2019, суббота, в 16:39 NOVT, Mikhail Stakhanov написал(а):
MS> Хешь вида {key}[0..n] (имя файла и номер каталога). Hужна сортировка по
MS> {key}.
MS> Хотя можно выделять массив на начальную букву, его сортировать и
MS> запихивать в
MS> файл. Hо всеравно в качестве развития как по {key} такой хеш сортируется
MS> ?

Первым делом нужно понять, что понятие "сортировки" или даже порядка
неприменимо к хешам. Их внутреннее хранение не определено.

Сортированным может быть список скаляров, то есть ключей:

my @sorted_keys = sort(keys(%hash));

Функция keys, применённая к хешу, возвращает новый список
с копиями ключей этого хеша, а функция sort возвращает
ещё одну копию списка, уже сортированную (после чего промежуточные
копии удаляются сборщиком мусора как не имеющие ссылок на них).

И вот потом уже можешь делать foreach (@sorted_keys) и
внутри цикла переменная $_ будет пробегать значения ключей
в порядке возрастания.

Eugene
--
Поэты - страшные люди. У них все святое.
0 new messages