2014-12-17 2 views
1

Я хотел бы сделать следующее в Perl:Выберите массив из массива в Perl

my @triples=([3,4,5],[5,12,13],[8,5,17],[7,24,25]}; 

Тогда я хочу, чтобы выбрать один из четырех троек вкось, а затем присвоить элементы отбора переменные x, y и r.

Например, если [3,4,5] выбрано случайным образом, назначьте x = 3, y = 4, r = 5.

Любые предложения?

+2

'my ($ x, $ y, $ r) = @ {$ triplets [int (rand 4)]}' как это? –

+0

Отличный ответ! Он работает так же, как это необходимо для работы. Благодарю. – David

ответ

4

Целое число от 0 до 4 (4 эксклюзив):

int(rand 4). 

Используйте это в качестве индекса массива:

$triplets[int(rand 4)] 

Теперь разыменования и назначить своим переменным:

my ($x, $y, $r) = @{$triplets[int(rand 4)]} 

как @Jim Davids указал, вы можете отказаться от int и получить более общий подход, лет u может использовать @triplets в скалярном контексте, чтобы получить длину массива.

my ($x, $y, $r) = @{$triplets[rand @triplets]} 
+4

Поскольку perl усекает float при указании в качестве индекса массива, вам не нужно 'int'. И так как '@ arr' в скалярном контексте возвращает размер массива, вы можете удалить жесткие' 4' и сделать '... = @ {$ triplets [rand @ $ triplets]}' –

+1

@Jim Davids: Спасибо, я редактировал это, но '@ $ triplets' является разрывом массива' $ triplets', поэтому я заменил его на '@ triplets', так как' rand' обеспечивает скалярный контекст –

+0

О, правильно, извините. Думал, что я работал с массивом _reference_ ссылок на массив в течение минуты. –

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