Есть ли синтаксис для извлечения диагонали из двумерного массива? - PullRequest
11 голосов
/ 03 мая 2019

В основном я могу следовать синтаксису , чтобы «развернуть / разрезать» массив с несколькими измерениями (и сглаживанием) на странице документов.Очень классная особенность.Например, учитывая:

my @a=[[1,2,3],
       [4,5,6],
       [7,8,9]];

Я могу выбрать столбец 2 выше, используя:

say @a[0,1,2;1]; #This output (2,5,8)

Можно ли извлечь диагональ (1,5,9) в аналогичном компактесинтаксис?

1 Ответ

9 голосов
/ 03 мая 2019
say @a.[ 0,1,2 ; { $++ } ] ; # (1 5 9)

Таким образом, вместо 1, который оценивается как 1, я использовал { $++ }, который является Block.

Когда встречается P6объект вызываемого кода в качестве значения индекса, он вызывает его один раз для каждого оцениваемого среза, в данном случае 0 th, 1 st и 2 ой строки.

$ - анонимная скалярная переменная состояния.

...