Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Объясните суть массива


Автор: almsc 30.1.2007, 11:53
Есть программка
Цитата

#!C:\Perl\perl.exe

@array = qw ( zero one two three four five six seven eight nine );


@array[ 1, 3, 5, 7, 9 ] = qw(1 3 5 7 9 );
print "@array\n";



вот её результат 
Цитата

zero 1 two 3 four 5 six 7 eight 9


Каким образом выводится именно такой результат? Т.е. почему после zero идет цифра 1, потом two и снова цифра 3 smile 

Автор: amg 30.1.2007, 12:06
Казалось бы очень логичный результат, учитывая, что индексы массивов в perl нумеруются начиная с 0.
Т.е. 2-му, 4-му, ..., 10-му элементам массива присваиваются новые значения: 1, 3, ..., 9 соответственно.

Автор: almsc 30.1.2007, 12:30
я спрашиваю почему именно цифры указываются?

Автор: amg 30.1.2007, 12:36
Цитата(almsc @  30.1.2007,  12:30 Найти цитируемый пост)
я спрашиваю почему именно цифры указываются?
Не совсем понял. Какие цифры имеются в виду? (В Вашем посте последовательности цифр фигурируют в 3-х местах. Два раза в этой строке: @array[ 1, 3, 5, 7, 9 ] = qw(1 3 5 7 9 ); Здесь в 1-м случае цифрры - это индексы массива, во втором - содержимое списка. И третий раз - как результат печати, чередующиеся со словами.)

Автор: almsc 30.1.2007, 12:54
я не понимаю, как формируется это чередование?

Автор: amg 30.1.2007, 13:10
Код

@array[ 1, 3, 5, 7, 9 ] = qw(1 3 5 7 9 );
Смотрим. @array[ 1, 3, 5, 7, 9 ] - это срез массива, в него входят 2-й, 4-й, ..., 10-й элементы, т.е ('one', 'three', 'five', 'seven', 'nine' ) или, что то же самое, qw(one three five seven nine). Эти элементы массива @array операцией присваивания мы заменяем элементами списка qw(1 3 5 7 9 ) (в этом списке цифры - это не индексы, а просто символы). При этом 1-й, 3-й, .., 9-й элементы массива не затрагиваются и остаются словами. Вот все.

Автор: Shaggie 30.1.2007, 14:50
Проще говоря:
Код

@array = qw ( zero one two three four five six seven eight nine );
# создаем массив из десяти элементов, где
# $array[0]="zero", $array[1]="one" и т.д.

@array[ 1, 3, 5, 7, 9 ] = qw(1 3 5 7 9 );
# то же самое, что
$array[1]=1;
$array[3]=3;
$array[5]=5;
$array[7]=7;
$array[9]=9;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)