Итерация по таблице с использованием выбранных ключей - PullRequest
0 голосов
/ 18 сентября 2018

В приведенной ниже таблице и для цикла показано, как мы обычно получаем доступ ко всем ключам, парам значений в lua

local t = {a1 =11, a2=22, c=3, d=4}

for k, v in pairs(t) do
  print(k,v)
end

-- Output: k = a1, a2, c, d & v = 11, 22, 3, 4 respectively
  a1 11  
  a2 22
  c  3
  d  4

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

k = a1,a2 

Так как я собираюсь добавить больше таблиц в t как

local t = {
          {a1 = 11, a2 = 22, c = 3, d = 4},
          {a1 = 12, a2 = 23, c = 2, d = 4},
          {a1 = 13, a2 = 24, c = 1, d = 4},
          {a1 = 14, a2 = 25, c = 0, d = 4},
          {a1 = 15, a2 = 26, c = 0, d = 4}
          }

Что я хочу использовать что-то вроде

for k = {a1, a2} in pairs (t) do
-- something
end

Есть ли способ сделать это , кроме , добавив условие if в цикле, поскольку это будет повторять все пары k, v и не нужно

for k,v in pairs (t) do
    if (k == a1 or k == a2) then
    -- something

1 Ответ

0 голосов
/ 18 сентября 2018

вы можете сделать это следующим образом

   local t = {
      {a1 = 11, a2 = 22, c = 3, d = 4},
      {a1 = 12, a2 = 23, c = 2, d = 4},
      {a1 = 13, a2 = 24, c = 1, d = 4},
      {a1 = 14, a2 = 25, c = 0, d = 4},
      {a1 = 15, a2 = 26, c = 0, d = 4}
      }
local keys_to_iterate = {"a1", "a2"}

for index = 1, #t do
  for k = 1, #keys_to_iterate do
    if t[index][keys_to_iterate[k]] then
      print(keys_to_iterate[k] , t[index][keys_to_iterate[k]])
    end
  end
end

вы можете увидеть это здесь

https://repl.it/repls/CoralIndianredVaporware

...