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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> хеш из двух списков? не догоняю!!! 
:(
    Опции темы
everyone
Дата 8.6.2004, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



кто-нибудь знает как сделать из двух @списков один %хеш, в котором keys будут из первого списка, а values из другого списка, кроме того, чтобы они точно соответствовали, то есть первая ячейка первого списка должна соответствовать первой ячейке второго списка, вторая ячейка, другой второй ячейке и т.д.

я пытался сделать это при помощи for:

Код

#begin @1-первый произвольный массив @2-второй произвольный массив
#оба массива имеют одинаковое колличество ячеек

foreach($i=0;$i<$num;$i++)
{
%hash=("@1[$i]","@2[$i]");
}

#end


хоть и понял глупость своей ошибки, но ничего более подходящего не написал.
Да и кроме того это мой первый опыт программирования на perl smile.gif.
И ещё, есть кто-нибудь к кому постоянно можно обращаться с подобного рода проблемами,? буду невероятно благодарен за нехлопотную помощ.


--------------------
Что написал, то написал (Пилат)
PM ICQ Skype   Вверх
Nobody
Дата 8.6.2004, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 25.8.2003
Где: Россия, Москва

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



Код

#!/usr/bin/perl -wT
use strict;
my @keys =  ("key1", "key2");
my @values = ("value1", "value2");
my %hash;

for (my $i = 0; $i < scalar(@keys); $i++) {
       $hash{$keys[$i]} = $values[$i];
}

foreach (keys(%hash)) {
       print $_." -> ".$hash{$_}."\n";
}



--------------------
Алгоритм помещения вопросов на форуме
Выражаем спасибо вот ТАК
Use the Source, Luke!
PM MAIL WWW ICQ   Вверх
Kiber_rat
Дата 9.6.2004, 03:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MACMANIAC
**


Профиль
Группа: Участник
Сообщений: 276
Регистрация: 18.4.2002
Где: Ashdod, Israel

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



Или так... smile.gif
Код
#!/usr/bin/perl -w
my @arr1 = (1,2,3,4,5);
my @arr2 = qw(a b c d e);
my (%hash, $i);
map {$hash{$_} = $arr2[$i++]} @arr1;
print "$_=$hash{$_}\n" for sort (keys %hash);



--------------------
Best regards!                                                             
@..@_____Ku6ep
=*=______\______KPbIC
Код
print join "",map{chr}(split/(\w{2})/,hex(int(2175.57302796298**2)))
PM WWW ICQ Skype Jabber YIM   Вверх
Kiber_rat
Дата 9.6.2004, 04:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MACMANIAC
**


Профиль
Группа: Участник
Сообщений: 276
Регистрация: 18.4.2002
Где: Ashdod, Israel

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



Э-э... Я вот тут подумал smile.gif Если идля тебя не критично сохранение этих списков, то тогда так:

Код
#!/usr/bin/perl -w
my %hash;
my @arr1 = (1,2,3,4,5);
my @arr2 = qw(a b c d e);
$hash{$_} = shift @arr1 for @arr2;
print "$_=$hash{$_}\n" for sort (keys %hash);


А если таки критично тогда так:

Код
%hash = (%hash, $arr1[$_], $arr2[$_]) for (0..@arr1-1);


Кроме того, не стоит называть массивы, и вобще переменные чем либо, начинающимся на цифру.
Что касается твоего примера, то его малость доработав тоже можно юзать:
Код
for(@a){ # Зачем foreach? Это только для массивов или списков, и то... И $i не нать
    %hash{$_}=shift @b;# Если ты не знаешь что есть $_ то почитай, это весьма сладкая весчь!
}
# Или, используя постфиксный for:
%hash{$_}=shift @b for @a;


Упс... Пришли к тому же smile.gif Но надеюсь помогло понять...


--------------------
Best regards!                                                             
@..@_____Ku6ep
=*=______\______KPbIC
Код
print join "",map{chr}(split/(\w{2})/,hex(int(2175.57302796298**2)))
PM WWW ICQ Skype Jabber YIM   Вверх
Nobody
Дата 9.6.2004, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 25.8.2003
Где: Россия, Москва

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



There's more than one way to do it smile.gif


--------------------
Алгоритм помещения вопросов на форуме
Выражаем спасибо вот ТАК
Use the Source, Luke!
PM MAIL WWW ICQ   Вверх
everyone
Дата 10.6.2004, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



[q]Кроме того, не стоит называть массивы, и вобще переменные чем либо, начинающимся на цифру[/q]
это лишь пример, и не стоит его воспринимать так же категорично, как компилятор smile.gif.

Код

#!/usr/bin/perl -wT
use strict;
my @keys =  ("key1", "key2");
my @values = ("value1", "value2");
my %hash;

for (my $i = 0; $i < scalar(@keys); $i++) {
      $hash{$keys[$i]} = $values[$i];
}

foreach (keys(%hash)) {
      print $_." -> ".$hash{$_}."\n";
}


что такое strict? И что это за приём с "my" ? - можно по-подробнее как это работает?
Да, кроме этого, как работает оператор ".", я интуитивно понимаю для чего он, но лучше знать его свойства в точности.

Код

#!/usr/bin/perl -w
my @arr1 = (1,2,3,4,5);
my @arr2 = qw(a b c d e);
my (%hash, $i);
map {$hash{$_} = $arr2[$i++]} @arr1;
print "$_=$hash{$_}\n" for sort (keys %hash);


а здесь тоже странноватый оператор? - sort, с которым, простите, я тоже не знаком, нельзя о нём пару слов? и о shift, если можно smile.gif.
а на счёт for и foreach, где-то я читал, что это совершенно одно и то же ???
а вот с $_ я более менее знаком, вот только не научился предсказывать его значение вне циклов, да впрочем ещё не особенно требовалось.
да и простите за offtop, для такого вопроса наверное нужно было создавать новый форум или покапаться в старых темах, но как лучше(с затратой меньшего колличества ресурсов, меньше строк кода) выяснить имена всех файлов в дирректории? Просто я делал это с помощью Dir из командной строки, потом куча преобразований списков в скаляр и обратно, получается громадный список, в котором слишком уж много лишнего и по шаблону выделять из него файлы в ещё один список - думаю это не лучший способ, наверняка Larry Wall придумал что-нибудь на этот счёт smile.gif.

--------------------
Что написал, то написал (Пилат)
PM ICQ Skype   Вверх
Nobody
Дата 10.6.2004, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 25.8.2003
Где: Россия, Москва

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



Цитата(everyone @ 10.6.2004, 10:43)

что такое strict? И что это за приём с "my" ? - можно по-подробнее как это работает?
Да, кроме этого, как работает оператор ".", я интуитивно понимаю для чего он, но лучше знать его свойства в точности.


perldoc strict
http://www.perldoc.com/perl5.6.1/lib/strict.html

Цитата(everyone @ 10.6.2004, 10:43)

здесь тоже странноватый оператор? - sort, с которым, простите, я тоже не знаком, нельзя о нём пару слов? и о shift, если можно smile.gif.


perldoc sort
http://www.perldoc.com/perl5.6.1/pod/func/sort.html

perldoc shift
http://www.perldoc.com/perl5.6.1/pod/func/shift.html

Это сообщение отредактировал(а) Nobody - 10.6.2004, 14:06


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


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

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


 




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


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

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