Как получить все значения из массива с помощью lua - PullRequest
1 голос
/ 20 марта 2019

У меня есть многомерный массив:

result = {
  {
    data = {
      language = "English",
      name = "Freak Out",
      list = {
        {
          type = "songs",
          album = "1234"
        }, {
          type = "songs",
          album = "4234"
        }, {
          type = "songs",
          album = "5829"
        }
      }
    }
  }
}

Как мне получить динамический доступ к списку в этом массиве?

Этот код печатает первый альбом (1234):

for i, v in pairs(result) do print(v.data.list[1].album) end

Я хочу напечатать все album с их type.Как мне это сделать?

Ответы [ 2 ]

6 голосов
/ 20 марта 2019

result - список таблиц
result[i].data.list - это список таблиц.

for _, res in ipairs(result) do
  for _, song in ipairs(res.data.list) do
    print(song.type, song.album)
  end
end

это выводит

songs   1234
songs   4234
songs   5829
0 голосов
/ 22 марта 2019

Во-первых, вам нужно знать, что таблица имеет два типа в lua. Один - хеш-таблица, а другой - массив. В вашем коде. результат члена и result.data является хеш-таблицей, каждый элемент имеет строковый ключ. result и result.data.list является таблицей массива, все члены таблицы имеют цифровую клавишу, индекс по умолчанию начинается с 1.

Во-вторых, для обхода таблицы двух типов есть две функции, пары для хэш-таблицы и iparis для таблицы массивов.

печать всего альбома в списке (массив):

for k, v in ipairs(res.data.list) do
    print(v.type, v.album)
end
...