Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сортировка ХЭША, сложная сортировка по по значению 
:(
    Опции темы
konst
Дата 17.12.2002, 03:47 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Есть программка:
=======
Код

#!/usr/bin/perl
#СОРТИРОВКА ПО ВНУТРЕННИМ ПОЛЯМ ЗНАЧЕНИЙ ХЭША!
# ДАН ХЭШ. Его value = определ. формат
$field = $ARGV[0]; # по какому полю сортировать!
### FIELDS:# 0 ### 1 ### 2 ### 3 ####
$hash{1} = 'aaa:::ppp:::zzz:::92';
$hash{2} = 'bbb:::ddd:::sss:::3';
$hash{3} = 'ccc:::kkk:::nnn:::77';
# %hash - for example

sub my_sort {
# $field = shift; (НЕ РАБОТАЕТ)
   @a = split('::+',$hash{$a});
   @b = split('::+',$hash{$b});
   if ($a[$field] =~ /^\d+$/ && $b[$field] =~ /^\d+$/) {
$a[$field] <=> $b[$field];
   } else {
uc($a[$field])cmp uc($b[$field]);
   }
}

print "SORT BY $field\n";
#foreach $x (sort my_sort($field) keys %hash) {# ERROR
foreach $x (sort my_sort keys %hash) {
   print "$x ($hash{$x})\n";
}
# END

=====
Это  РАБОТАЕТ!!!
Но хотелось бы передавать $field как аргумент фунции my_sort(),

Т.е. что-то типа: foreach $x (sort  my_sort($field) keys %hash) {

Но здесь  ERROR ??? Кто подскажет как это сделать?
  Вверх
NightGoblin
Дата 17.12.2002, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1021
Регистрация: 24.11.2002
Где: 127.0.0.1

Репутация: нет
Всего: 11



Если, насколько я понял, переменная $field глобальная, то зачем передавать ее в функцию в качестве параметра?...


--------------------
Kernel panic: /dev/null overflow!
GCS/IT/MU/O d-@ s: a- C++$>++++$ ULSB(+++) P+++ L+++>++++ !E W++(-) N o? K w-- O? M>+ V? PS+ PE Y+ PGP+>+++ t- 5 X+ R- !tv b+ DI+ D+ G e++ h--- r++ y?
B4F1 54B6 8738 26CD 5125 0581 B923 9273 FE59 1981
PM MAIL WWW ICQ   Вверх
konst
Дата 17.12.2002, 20:08 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











>Если, насколько я понял, переменная $field глобальная, то зачем передавать ее в функцию в качестве параметра?...
Нет это только example. Просто хочется написать такой модуль с этой подпрограмкой сортировки:
sub my_sort {
$field_number = shift;  #HERE
$field_separator = shift;HERE
 @a = split("$field_separator",$hash{$a});
...
$a[$field_number] <=> $b[$field_number];
...
}
и потом его использовать при необходимости.
Т.е. мне как раз не нужна global $field
А вот как ее передать &my_sort - не понимаю
foreach $x (sort my_sort($field) keys %hash) {  # если так то ERROR
  Вверх
NightGoblin
  Дата 19.12.2002, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1021
Регистрация: 24.11.2002
Где: 127.0.0.1

Репутация: нет
Всего: 11



Если действительно надо передать значения как параметры функции, можно написать:
Код

foreach $x (sort {my_sort ($field, '::')} keys %hash) {
       ...
}

, то есть использовать промежуточную анонимную функцию для вызова my_sort с аргументами. :)


--------------------
Kernel panic: /dev/null overflow!
GCS/IT/MU/O d-@ s: a- C++$>++++$ ULSB(+++) P+++ L+++>++++ !E W++(-) N o? K w-- O? M>+ V? PS+ PE Y+ PGP+>+++ t- 5 X+ R- !tv b+ DI+ D+ G e++ h--- r++ y?
B4F1 54B6 8738 26CD 5125 0581 B923 9273 FE59 1981
PM MAIL WWW ICQ   Вверх
konst
Дата 19.12.2002, 21:42 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Спасибо. Это то что я и искал.
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0563 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.