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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Хэш. Цикл по первым значениям, Хэш 
V
    Опции темы
meridian
Дата 26.2.2014, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 8.11.2005

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



Коллеги, добрый день!
Есть хэш

Код

%hash=( 'k1' => 'var1, var2',
        'k2' => 'var3',  var6'
    'k3' => 'var4, var5'
);

foreach my $rec ( sort keys %hash )
{
    printf "$hash{$rec}\n";
}



Получаем 
var1, var2
var3, var6
var4, var5

Подскажите плиз, можно ли реализовать цикл только по первым значениям хэша, т.е. var1, var3, var4 ?
Спасибо!

PM   Вверх
Bulat
Дата 26.2.2014, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 5
Всего: 57



Цитата(meridian @  26.2.2014,  12:27 Найти цитируемый пост)
Подскажите плиз, можно ли реализовать цикл только по первым значениям хэша, т.е. var1, var3, var4 ?


sort values

при этом необходимо задать свою функцию сортировки.

Например:

Код

my %hash = ( 
  'k1' => 'var1, var2',
  'k2' => 'var7, var6',
  'k3' => 'var4, var5'
);

foreach my $rec ( sort by_first_var values %hash )
{
    printf "$rec\n";
}

sub by_first_var {
  ($a =~ /^var(\d)/)[0] <=> ($b =~ /^var(\d)/)[0]
}


Это сообщение отредактировал(а) Bulat - 26.2.2014, 12:48


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
Jimy
Дата 26.2.2014, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 4.7.2010

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



Если хэш формируется выше по коду, то можно сформировать его подходящим образом, например так
Код

%hash=(
'k1' => ['var1', 'var2'],
'k2' => ['var3', 'var6'],
'k3' => ['var4', 'var5']
);

и тогда в цикле получить первое значение можно так
Код

foreach my $rec ( sort keys %hash )
{
    printf "$hash{$rec}[0]\n";
}

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

foreach my $rec ( sort keys %hash )
{
    my @values = split(/\,\s*/, $hash{$rec});
    printf "$values[0]\n";
}

PM   Вверх
meridian
Дата 26.2.2014, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 8.11.2005

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



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


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

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


 




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


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

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