Краткая инициализация 2D примитивного массива в Котлине - PullRequest
0 голосов
/ 25 января 2019

Я пытаюсь определить большое количество примитивных 2D-массивов в Kotlin, и, похоже, для этого нет краткого способа сделать это. Например, в C ++ вы можете сделать следующее:

int arr[2][5] =
    {{1,8,12,20,25},
     {5,9,13,24,26}};

Лучшее, что я смог придумать в Котлине, это

val arr = arrayOf(
            intArrayOf(1,8,12,20,25),
            intArrayOf(5,9,13,24,26))

Java (с ее бессмысленным повторением) даже побил Котлина

int[][] arr = new int[][]
        {{1,8,12,20,25},
         {5,9,13,24,26}};

Хотя дополнительный шаблон не является концом света, он раздражает.

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Как указывает другой ответ, для этого нет встроенного более короткого синтаксиса. Ваш пример с arrayOf() & c является традиционным решением.

(Были предложения о коллекционных литералах в Java и Kotlin , но они очень спорные , потому что есть так много возможностей: например, хотите ли вы ArrayList или LinkedList или какую-либо другую реализацию? Должна ли она быть изменяемой или неизменной? И т. д. И к тому времени, когда вы добавили специальный синтаксис для указания этого, он длиннее существующих функций!)

Но если краткость действительно важна в вашем случае, вы можете определить более короткие псевдонимы для встроенных функций, например ::

inline fun <reified T> a(vararg e: T) = arrayOf(*e)

1017 *

fun i(vararg e: Int) = intArrayOf(*e)

Тогда ваш пример сводится к:

val arr = a(i(1, 8, 12, 20, 25),
            i(5, 9, 13, 24, 26))
0 голосов
/ 25 января 2019

В Kotlin нет более короткого синтаксиса для массивов, он не предоставляет литералы коллекций (пока?).

val arr = arrayOf(
    intArrayOf(1,8,12,20,25),
    intArrayOf(5,9,13,24,26)
)

- это путь.

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