Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Linux и FreeBSD » Программирование в *nix » [решено] Perl хэш двумурных массивов

Ответить
Настройки темы
[решено] Perl хэш двумурных массивов

Аватара для Тишина

Пользователь


Сообщения: 127
Благодарности: 8

Профиль | Отправить PM | Цитировать


Добрый день!
Использую Perl 5.18 и пытаюсь добавить двумерные массивы в хэш (тип $hash{$key}=@matrix, где @matrix = двумерный массив, или массив массивов, кому как удобней в выражении). Помогите с выводом таких хэшей и адрессацией элементов.


пример кода в котором я задаю массив и присваиваю его в хэш
Код: Выделить весь код
	my %hash, @matrix;
	my @hash_key=qw(firs second 3rd 4rd 5rd);
	
	foreach (@hash_key) { # перебираем ключи для хэша

		undef @matrix; # обнуляем массив

		$n=1+int(rand(4)); # задаём кол-во строк в матрице
		print "\n\n\t Strok $n\n";

		for (my $j=0; $j<=$n; $j++) { # заполняем матрицу
			push(@matrix,['n+j='.($n+$j), 'n-j='.($n-$j), 'n*j='.($n*$j)]); # добавляем в массив массив из 3х элементов
		}
		
		print "\n\n matrix chek:\n";
		for (my $i=0; $i<$#matrix; $i++) {
			print "\n$i\n";
			print "$_\t" foreach(@{$matrix[$i]});
		}

		
		$hash{$_}=@matrix; # присваиваем очередному ключу матрицу
	}
	
	
	foreach my $key (sort keys %hash) { # перебор ключей хэша
		print "\n Key:$key\n";

		#
		# а дальше пытаюсь вывести, и фэйл. что-то не так
		#
		for (my $i=0; $i<=$#{$hash{$key}}; $i++) { 
			print "\n$i\n";
			print "$_\t" foreach(@{${$hash{$key}}[$i]});
		}
	}
подозреваю, что не правильно пытаюсь обратиться к значению хэша как к массиву @{$hash{$key}} - уже на этом этапе ошибка.

заранее спасибо!

Отправлено: 15:19, 06-09-2016

 

Аватара для Тишина

Пользователь


Сообщения: 127
Благодарности: 8

Профиль | Отправить PM | Цитировать


победил!

ошибка крылась в присваении матрицы в хэш. попробовал присваивать так и всё встало на свои места
Код: Выделить весь код
@{$hash{$_}}=@matrix; # присваиваем очередному ключу матрицу
либо сразу пушить в хэш, дабы сыкономить на коде
Код: Выделить весь код
for (my $j=0; $j<=$n; $j++) { # заполняем матрицу
	push(@{$hash{$key}},['n+j='.($n+$j), 'n-j='.($n-$j), 'n*j='.($n*$j)]); # добавляем в массив массив из 3х элементов
}
тему можно закрывать

Отправлено: 15:46, 06-09-2016 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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



Компьютерный форум OSzone.net » Linux и FreeBSD » Программирование в *nix » [решено] Perl хэш двумурных массивов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
PERL многомерный хэш. Вывести первый ключ Тишина Программирование в *nix 4 01-06-2017 14:10
Info - Что это за хэш? Scaltro Защита компьютерных систем 0 21-07-2014 22:53
FreeBSD - ХЭШ Ruslan19891989 Общий по FreeBSD 0 02-11-2011 17:36
Прочие БД - обработка массивов в postgres PhilB Программирование и базы данных 0 22-09-2010 19:13
FreeBSD 5.3 Perl не видит локали, а KDE при сборке не видит perl :o mar Общий по FreeBSD 8 06-05-2005 13:13




 
Переход