Kotlin Список списка - PullRequest
       32

Kotlin Список списка

0 голосов
/ 24 января 2020

Я что-то здесь упускаю, и, кажется, я не могу найти решение самостоятельно (по крайней мере, в разумные сроки).

Я пытаюсь создать 2-мерный список, используя MutableList, так как каждая запись содержит строку, int и логическое значение.

Я создаю записи списка, содержащие данные, подобные этому:

var workEntry = mutableListOf("Knus og Knask AS", 100, true)

Затем я пытаюсь создать список этот объект и многое другое:

var work = mutableListOf(mutableListOf("Knus og Knask AS", 100, true), mutableListOf("Del og Hel", 20, false))

Это, кажется, работает, вроде ...

Однако, если я получаю доступ к элементам списка, я не могу получить к ним доступ, как это:

[x][x]

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

var x = work[0].toString()  -> This yields [Knus og Knask AS, 100, true]    

Но это не работает:

var y = work[0][0].toString()    <--- the second [0] doesn't exist.

Почему это? Что мне не хватает? Причина, по которой мне нужен 2-й список, заключается в доступе к каждому элементу, как в таблице. Я не хочу использовать строковые логики c для разделения элементов в «строке».

Еще проще:

var temprow = mutableListOf("a", 10, true)
var temptable = mutableListOf<Any>(temprow)

var a1 = temptable [0] [0 ] -> возвращает «Неразрешенная ссылка». Нет метода get, обеспечивающего доступ к массиву.

Пока люди голосуют против или голосуют за закрытие вопроса, не предлагая столько, сколько комментарий, ответы не будут быть поддержанным или принятым за этот вопрос. Те, кто оказал помощь, могут поблагодарить этих людей за то, что они не получили свой кредит.

Ответы [ 4 ]

0 голосов
/ 04 февраля 2020

Я отвечаю на этот вопрос сам, отвечая тем, кто голосует за вопрос или даже ЗАКРЫВАЕТ его (!), Не имея приличия или личной неприкосновенности комментировать его.

Это Это огромная проблема со StackOverflow. Нет абсолютно никаких веских причин, по которым вы должны быть в состоянии что-то проголосовать без необходимости оставлять комментарии.

0 голосов
/ 24 января 2020

Проверьте, работает ли это.

fun main(){

    val arrayOrg = Array(10) { arrayOf(Triple("Knus og Knask AS", 100, true), Triple("Knus og Knask AS", 200, true)) }

    println(arrayOrg[0][1])
}
0 голосов
/ 24 января 2020

Я использовал kotlin с версией 1.3.50 и мог не воспроизвести вашу ошибку. Синтаксис кода, который я пробовал:

val work = mutableListOf(mutableListOf("Knus og Knask AS", 100, true), mutableListOf("Del og Hel", 20, false))
val result = work[0][0] // compiles

---------------

val work2 = listOf(listOf("Knus og Knask AS", 100, true), listOf("Del og Hel", 20, false))
val result2 = work2[0][0] // compiles

---------------   

val work3 = listOf(Triple("Knus og Knask AS", 100, true))
work3[0].first // compiles

Контрольный список

  • Есть ли у вас последняя (стабильная) kotlin версия?
  • Вы пытались выполнить этот код на другом компьютере (от сотрудника / друга / онлайн-редактора)?
  • Вы сами изменили тип своих списков? mutableListOf<Any> не позволит вам получить доступ к любому индексу! List<List<*>> будет работать и вернет Any для [0][0] (что не является хорошим способом продолжения). Если вы позволите kotlin определить сам тип, он сгенерирует List<List<{Comparable{Boolean & Int & String}> & java.io.Serializable}>>.
  • Переосмыслите ваш выбор реализации и go для Списка с пользовательским классом данных (или Triple). Таким образом, ваши индексные вызовы безопасны для типов. listOf(Triple("Knus og Knask AS", 100, true))
0 голосов
/ 24 января 2020

Краткий ответ:

var temprow = mutableListOf("a", 10, true)
var temptable = mutableListOf<List<Any>>(temprow)

Вам необходимо указать тип как List<Any> или MutableList<Any>. Таким образом, когда вы получаете доступ к таким элементам, как temptable[0], возвращается List<Any> с доступом к массиву.

...