2015-01-13 2 views

ответ

4

У Perl нет массивов с несколькими размерами.

У вас есть массив и каждый элемент этого массива - это ссылка на другой массив. Возможно, вы захотите прочитать около Perl References, так как это позволяет Perl создавать некоторые очень сложные структуры данных.

Многие люди думают о нем, как многомерный массив, и вы могли бы относиться к ней как таковой при определенных обстоятельствах. Однако я предпочитаю синтаксис ->, который напоминает мне, что это всего лишь ссылка на ссылку.

$map[0]->[0] = 'a'; 
$map[0]->[1] = 'b'; 
$map[1]->[0] = 'c'; 
$map[1]->[1] = 'd'; 

Теперь я могу взять структуру данных друг от друга:

  • @map: Это массив из двух элементов в нем, $map[0] и $map[1].
  • $map[0]->[]: Это ссылка на другой массив. Этот массив также имеет элементы в нем.
  • $map[1]->[]: Это еще один ссылка еще один массив. В этом массиве есть два элемента.

Отметьте, что $map[1]->[] означает, что $map[1] содержит ссылку на массив. Thqt означает, что вы можете передать $map[1] в качестве ссылки на этот внутренний массив.

mysub ($map[1]); 

Вот простая программа:

#! /usr/bin/env perl 
# 
use strict; 
use warnings; 
use feature qw(say); 

my @map; 
$map[0]->[0] = 'a'; 
$map[0]->[1] = 'b'; 
$map[1]->[0] = 'c'; 
$map[1]->[1] = 'd'; 

mysub($map[1]); 

sub mysub { 
    my $array_ref = shift; 

    my @array = @{ $array_ref }; # Dereference your reference 

    for my $index (0..$#array) { 
     say "\$map[1]->[$index] = $array[$index]"; 
    } 
} 

Это печатает:

$map[1]->[0] = c 
$map[1]->[1] = d 

Теперь вы видите, почему мне нравится этот -> синтаксис, хотя это на самом деле совершенно не нужны. Это помогает мне напоминать, с чем я имею дело.

1

Вы можете отправить ссылку на массив,

sub mysub { 
    my ($aref) = @_; 

    # work with @$aref .. 
} 

mysub($map[1]); 
1

Просто передайте скаляр $map[1].

fn($map[1]); 

sub fn 
{ 
    my @loc_map_1 = @{ $_[0] }; 

Помните, что perl не имеет «настоящих» 2-мерных массивов. В вашем случае map представляет собой массив, содержащий 2 ссылки на массивы.

Смежные вопросы