Perl: создание массива известного размера - PullRequest
4 голосов
/ 17 мая 2011


Я должен хранить данные из запроса, запущенного с Parallel :: ForkManager.
Но это происходит не для того, чтобы я опрашивал все порты коммутатора, но некоторые из них отвечают быстрее, чем другие.Итак, я не знаю, как сохранить его, чтобы отобразить его позже.

Могу ли я так сделать?

my @array = ();
$array[10] = "i am a string corresponding to port 10"
$array[2] = "the one for the port 2"
...
print @array;

Или я должен использовать хеш% с номером порта какключи, но, кажется, не самый лучший.
Спасибо.

Ответы [ 3 ]

7 голосов
/ 17 мая 2011

Вы можете сделать это:

my @array = ();
$array[10] = "i am a string corresponding to port 10"
$array[2] = "the one for the port 2"
print @array;

Но если некоторые порты не отвечают, у вас будут незавершенные записи в слотах массива, которые не были заполнены.Как вы говорите, использование хеша будет чище:

my %hash;
$hash{10} = "I am port 10";
$hash{2} = "I am port 2";

foreach my $key (keys %hash) {
   print "$key: $hash{$key}\n";
}
5 голосов
/ 17 мая 2011

Хеш - это хороший тип данных, который следует использовать для " разреженных массивов ". Кажется, вы описываете именно это; разреженный массив - тот, где большинство элементов будет неопределенным. Perl позволит вам предварительно настроить стандартный массив, но это не то, что вам нужно. Кажется, вам нужен хеш, где не имеет значения, если у вас есть $array[2] и $array[23], но между ними нет, например. Используя собственный массив, как только вы создадите $array[23], все неиспользуемые элементы ниже 23 появятся с 'undef' в качестве значения.

С хэшем вы получите $item{2} и $item{23}. Вы можете получить список элементов, которые хранятся в хэше, используя функцию keys().

5 голосов
/ 17 мая 2011

В Perl вам не нужно беспокоиться о размерах массивов. Они растут по мере необходимости:

my @array; # defines an empty array

$array[0] = 4; # array has one element
$array[9] = 20; # array has 10 elements now

print join "-", @array;

# prints: 4--------20 because the empty places are undef

Если у вас много портов и вас беспокоит слишком большое количество пустых записей, используйте хэш. Я не вижу причин, чтобы этого не делать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...