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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> получить 1 ключ из хэша, как получить 1 (произвоьный) ключ ? 
:(
    Опции темы
sir_nuf_nuf
Дата 15.9.2008, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Есть хэш который использовался для проверки уникальности чего - либо.
По смыслу - в нем всего 1 ключ (если 2 - это ошибка бизнес - логики)

Задача - красиво извлечь оттуда этот ключ.

Господа, однострочники, предлагайте решения =)

мое:
Код

$a = shift @{[%b]};


щитаю сие все-таки хаком =(

Это сообщение отредактировал(а) sir_nuf_nuf - 15.9.2008, 20:09


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
arto
Дата 15.9.2008, 20:19 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

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



(keys %hash)[0]?
PM MAIL ICQ   Вверх
sir_nuf_nuf
Дата 15.9.2008, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



arto, интуиция подводит =)

Код

%a = (a => 1);
print (keys %a)[0];

syntax error at - line 2, near ")["
Execution of - aborted due to compilation errors.



--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
arto
Дата 15.9.2008, 21:50 (ссылка) |   (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

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



# perl -le '%a = (''a'' => 1); print ((keys %a)[0]);'
a
#
PM MAIL ICQ   Вверх
DaemonSuw
Дата 15.9.2008, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



я так понимаю "извлечь" - это удалить и получить значение, но ваше решение
Цитата

$a = shift @{[%a]};
print %a;

выдает 
Цитата

a1

Если удалять элемент не надо тогда достаточно просто ($a,undef) = each %a, или просто $a=each %a?

Это сообщение отредактировал(а) DaemonSuw - 15.9.2008, 22:03
PM MAIL ICQ   Вверх
amg
Дата 16.9.2008, 06:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(sir_nuf_nuf @  15.9.2008,  20:08 Найти цитируемый пост)
Господа, однострочники, предлагайте решения =)
Код
($a) = %a;


PM MAIL   Вверх
sir_nuf_nuf
Дата 16.9.2008, 06:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(amg @  16.9.2008,  06:48 Найти цитируемый пост)
($a) = %a;

ага, в принципе хорошо, но использовать это предполагалось именнов скалярном конетксте:
Код

my $self = {
   a => shift @{[%hash]},
   b => 1,
};


Добавлено через 4 минуты и 2 секунды
DaemonSuw, +1.

Действительно each в cкалярном контексте решает задачу =)

Цитата

each HASH

When called in list context, returns a 2-element list consisting of the key and value for the next element of a hash, so that you can iterate over it. When called in scalar context, returns only the key for the next element in the hash.


Итак решение: 
Код

$a=each %a;


или в нашем случае:
Код

$self = {
    a => scalar each %hash,
    b => 1,
};



--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
ginnie
Дата 16.9.2008, 11:29 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

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



sir_nuf_nuf, еще вариант

Код

$self = {
    a => (%hash)[0],
    b => 1,
};



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


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

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


 




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


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

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