Распечатать многомерный массив в Котлине? - PullRequest
0 голосов
/ 03 июля 2018

Учитывая приведенный ниже массив, какой самый простой способ его распечатать? Цикл является одним из вариантов, но есть ли другой вариант проще?

val array = arrayOf(arrayOf(1, 2),
arrayOf(3, 4),
arrayOf(5, 6, 7))

Ответы [ 3 ]

0 голосов
/ 03 июля 2018

1. Использование стандартной библиотеки

val array = arrayOf(arrayOf(1, 2),
            arrayOf(3, 4),
            arrayOf(5, 6, 7))

print(Arrays.deepToString(array))

2. Использование для цикла

fun <T> print2DArray(twoDArray: Array<Array<T>>) {
    for (i in 0 until twoDArray.size) {
        for (j in 0 until twoDArray[i].size) {
            print(twoDArray[i][j])
            if (j != twoDArray[i].size - 1) print(" ")
        }
        if (i != twoDArray.size - 1) println()
    }
}
val array = arrayOf(arrayOf(1, 2),
            arrayOf(3, 4),
            arrayOf(5, 6, 7))

print2DArray(array)
0 голосов
/ 03 июля 2018

Это зависит от того, как вы хотите показать это.

Вариант 1

fun Array.contentDeepToString: String

Возвращает строковое представление содержимого этого массива, как если бы это был список. Вложенные массивы также обрабатываются как списки. Если какой-либо из массивов содержит себя на каком-либо уровне вложенности, эта ссылка отображается как «[...]» для предотвращения рекурсии.

Обратите внимание, что это встроенная функция, использующая Arrays.deepToString(array) под капотом.

Затем, используя array.contentDeepToString(), вы получите в выводе эту строку:

[[1, 2], [3, 4], [5, 6, 7]]

Вариант 2

Я в основном использую Array.joinToString, это позволяет объединять массив с использованием данного разделителя и применять преобразование к каждому элементу. Из документа:

Создает строку из всех элементов, разделенных с помощью [separator] и с использованием заданных [prefix] и [postfix], если они имеются. Если коллекция может быть огромной, вы можете указать неотрицательное значение [limit], в этом случае только первый [limit] будут добавлены элементы, за которыми следует [усеченная] строка (по умолчанию "...")

В вашем случае, поскольку каждый элемент вашего массива является подмассивом, вы должны применить к ним преобразование, также используя

array.joinToString("\n") { subarray ->
    subarray.joinToString()
}

Это даст вам вывод:

1, 2
3, 4
5, 6, 7

Вы можете играть с параметрами разделителя, префикса, постфикса и преобразования , чтобы получить нужный формат.


Заключительные ноты

  • Цикл является своего рода единственным способом форматирования массива, либо contentDeepToString и joinToString используйте для цикла в их реализации, примите это во внимание.
  • joinToString также доступно для Iterable и Sequence
0 голосов
/ 03 июля 2018

Для этого есть встроенная функциональность:

val array = arrayOf(arrayOf(1, 2),
                arrayOf(3, 4),
                arrayOf(5, 6, 7))

println(array.joinToString(prefix = "[", postfix = "]") {
    it.joinToString(prefix = "[", postfix = "]")
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...