2014-11-15 6 views
1

Скажем, у меня есть 2d массив А как это,Perl преобразования массива из 2d-1d

my @A; 

$A[0][0]="text1"; 
$A[0][1]="text2"; 
$A[0][2]="text3"; 
$A[1][0]="text4"; 
$A[1][1]="text5"; 
$A[1][2]="text6"; 

Я хочу, чтобы преобразовать его в другой массив B, так что

$B[0] будет содержать (["text1","text2","text3"])

и

$B[1] будет содержать (["text4","text5","text6"]).

Я попытался

my @B = $A[]; 

Но это, очевидно, не работает.

+0

Я не думаю, что вы имели в виду квадратные скобки в своем вопросе, потому что если вы это сделали, то '@ B' вы хотите на самом деле совпадать с' @ A'. – hobbs

+0

Да, вы правы, должно быть, опаздывать. Я мог бы как-то сказать @B использовать @A, чтобы @B = ["text1", "text2", "text3"]. –

+0

Вы, похоже, смущены тем, что хотите. То, что вы описываете в '@ B', не является одномерным массивом. То, что вы хотите, есть то, что вы уже имеете в '@ A'. Возможно, вы не знаете, как массивы работают в Perl? – TLP

ответ

1

Ваше описание нового @B - это то, что @A уже содержит. Если вы имеете в виду то, что я думаю, что вы имеете в виду, то вы можете сделать это с помощью простого map:

my @B = map @$_, @A; 
+0

Спасибо, что, если я также хочу: @C = ["text4", "text5", "text6"] использовать только @A? –

+1

'my @C = @ {$ A [1]}' – Borodin

+0

большое спасибо! –

0
my @A; 
$A[0][0]="text1"; 
$A[0][1]="text2"; 
$A[0][2]="text3"; 
$A[1][0]="text4"; 
$A[1][1]="text5"; 
$A[1][2]="text6"; 

итерируем forloop и сохранить значение в 2d массив

for($i='0'; $i<=$#A; $i++) 
{ 
    push(@{$B[$i]}, @{$A[$i]}); 
} 

ВЫВОД:

print '$B[0][0]==>', $B[0][0], "\n"; 
print '$B[0][1]==>', $B[0][1], "\n"; 
print '$B[0][2]==>', $B[0][2], "\n"; 
print '$B[1][0]==>', $B[1][0], "\n"; 
print '$B[1][1]==>', $B[1][1], "\n"; 
print '$B[1][2]==>', $B[1][2], "\n"; 

Может быть это полезно для вашего вопроса.

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