Автор Тема: Трабл с хэшем  (Прочитано 4039 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн DartSidius

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 309
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Трабл с хэшем
« : 24 Ноября 2006, 05:47:07 »
Есть например хэш

%hash = (
 "text" => {
       type=>"".&get_types(%hash)."",
       name="text"
  },
  "textarea" => {
       type=>"".&get_types(%hash)."",
       name="textarea"
  }
);

sub get_types {

  my %get_types = @_;
  my $keys = "";
  foreach(sort keys %get_types) {
      if(exists($get_types{$_}) {my $keys .= "$_;"}
  }

 return $keys;

}


собственно с помощью функции get_types должны изыматься ключи хэша, но хэш не передаётся в функции...я так понимаю это из-за того что он передаётся из самого себя...может как то можно решить?

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Трабл с хэшем
« Ответ #1 : 24 Ноября 2006, 12:44:49 »
ссылку передавай и будет тебе щастье (с)
Кстати, а в одной теме нельзя все эти вопросы задавать, зачем плодить?
The documentations is your friend

Оффлайн DartSidius

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 309
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Трабл с хэшем
« Ответ #2 : 24 Ноября 2006, 16:12:20 »
Цитировать
NeoNox:
ссылку передавай и будет тебе щастье (с)


э...т.е. вот так get_types(\\%hash)

а в sub\'e считывать как?...\\@_?

Цитировать
NeoNox:
Кстати, а в одной теме нельзя все эти вопросы задавать, зачем плодить?


Почему же...можно конечно...но вопросы разные, вдруг кто-то будет искать...и не будет повторных тем плодить


о и ещё...А МОЖНО КАК-НИБУДЬ УЗНАТЬ КЛЮЧ ПОСЛЕДНЕГО ЭЛЕМЕНТА ХЭША? (только не алгоритм...его то я сделал...может как-нибудь по простому в перле можно?)

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Трабл с хэшем
« Ответ #3 : 24 Ноября 2006, 17:12:56 »
%h = (aaa=>1, bbb=>2, ccc=>3);

get_types(\\%h);

sub get_types
{

for (keys %{$_[0]})
{
 print "$_ => ${$_[0]}{$_} \\n";
}

}

Ну или красивее обернуть без переменных по умолчанию.

В хеше нет последнего элемента, ровно как и первого, это несортированный список, не путать с массивом.
The documentations is your friend

Оффлайн DartSidius

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 309
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Трабл с хэшем
« Ответ #4 : 24 Ноября 2006, 17:16:58 »
Цитировать
NeoNox:
В хеше нет последнего элемента, ровно как и первого, это несортированный список, не путать с массивом.



точно...затипил :)

Оффлайн DartSidius

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 309
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Трабл с хэшем
« Ответ #5 : 24 Ноября 2006, 17:23:18 »
Цитировать
NeoNox:
for (keys %{$_[0]})
{
print "$_ => ${$_[0]}{$_} \\n";
}

}



вот это, кстати не работает

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Трабл с хэшем
« Ответ #6 : 24 Ноября 2006, 17:25:58 »
Работает  DB<1> %= (aaa=>1bbb=>2ccc=>3)

                                                                                                                               
DB<2sub get_types{for (keys %{$_[0]}){print "$_ => ${$_[0]}{$_} \\n"; }}

                                                                                                                               
DB<3get_types(\\%h)
bbb => 2
aaa 
=> 1
ccc 
=> 3
The documentations is your friend

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Трабл с хэшем
« Ответ #7 : 24 Ноября 2006, 17:37:04 »
use Data::Dumper;

%
hash = ( "text" =>     {
                        
type=>&get_types(\\%hash),
                        
name=>"text"
                        
},
          
"textarea" => {
                        
type=>&get_types(\\%hash),
                        
name=>"textarea"
                        
}
);


print 
Dumper(%hash);

sub get_types
{
my %get_types = %{$_[0]};
my $keys;

foreach (
sort keys %get_types) {

    if(
$get_types{$_})
    {
        
$keys .= $_
    
}

}

return 
$keys;

}

С логикой работы программы чувствую не то что ты ожидаешь ;)
The documentations is your friend

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28