Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Хитрая склейка массивов, не соображу  (Прочитано 6653 раз)
0 Пользователей и 1 Гость смотрят эту тему.
perl6
Помогающий

ru
Offline Offline

« : 09-10-2021 19:57 » 

Приветствую. Никак не могу понять, как сделать вот такую вот хитрую склейку. Есть два массива, пример

Код:
my @imena = qw( vasya petya kirill tom sema timur ruslan):
my @nomera = qw( 1 2 3 4 5):

Так вот, сколько не мучался с хешами, вложенными циклами, как организовать следующее:

Цитата
vasya:1
petya:2
kirill:3
tom:4
sema:5
timur:1 # здесь самое интересное, т.к. массив с номерами закончился, мы снова его начинаем сначала и так, пока не опустеет массив с именами
ruslan:2
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 10-10-2021 01:00 » 

Сочувствую.
Нате.
Код: (Perl)
my $pos = 0;
my %result = map { $_ => $pos % @nomera } @imena;
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
perl6
Помогающий

ru
Offline Offline

« Ответ #2 : 10-10-2021 09:34 » 

Спасибо, но не работает

Код:
#!/usr/bin/perl -w

use utf8;
use Data::Dumper;
 
my @imena = qw( vasya petya kirill tom sema timur ruslan);
my @nomera = qw( 1 2 3 4 5);

my $pos = 0;
my %result = map { $_ => $pos % @nomera } @imena;

print Dumper %result;

$VAR1 = 'ruslan';
$VAR2 = 0;
$VAR3 = 'sema';
$VAR4 = 0;
$VAR5 = 'tom';
$VAR6 = 0;
$VAR7 = 'timur';
$VAR8 = 0;
$VAR9 = 'kirill';
$VAR10 = 0;
$VAR11 = 'petya';
$VAR12 = 0;
$VAR13 = 'vasya';
$VAR14 = 0;
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 10-10-2021 13:11 » 

Да, корректировочка:
my $pos = 0;
my %result = map { $_ => $pos++ % @nomera } @imena;

Вместо @nomera можно использовать сделать проще:
my $numbers = 5;
my $pos = 0;
my %result = map { $_ => 1 + ($pos++ % $numbers) } @imena;
« Последнее редактирование: 10-10-2021 13:14 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
perl6
Помогающий

ru
Offline Offline

« Ответ #4 : 11-10-2021 19:18 » new

Спасибо. Правда, решил немного другим способом данную задачу...  Внимание! Говорит и показывает...
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines