Задать вопрос
@Murat50005

Как сравнить две таблицы и вывести только те значения, которых нет в первой таблице, но есть во второй?

Как сравнить две таблицы и вывести только те значения, которых нет в первой таблице, но есть во второй на языке программирования LUA

[
local table1 = { [1] = "q", [2] = "p" }
local table2 = {[1] = "q", [2] = "p",  [3] = "f"}
]
  • Вопрос задан
  • 228 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
dollar
@dollar Куратор тега Lua
Делай добро и бросай его в воду.
Очевидно, что нужно перебрать значения в цикле.
Очевидно, что раз уж мы не можем перебирать отсутствующие значения, то нужно перебирать присутствующие значения, то есть перебираем вторую таблицу.
Таким образом, переформулируем:
вывести только те значения, которые есть во второй таблице, но при этом отсутствуют в первой.
spoiler
local table1 = { [1] = "q", [2] = "p" }
local table2 = { [1] = "q", [2] = "p",  [3] = "f"}

for k,v in pairs(table2) do
    if not table1[k] then
        print(v)
    end
end

Если же соответствие ключей не учитывается, то решение будет чуть сложнее. Для больших таблиц лучше их переделать под новый формат, в котором ключами будут значения:
local table1_fixed = { q = true, p = true }
Далее можно будет проверять присутствие значения в первой таблице по ключу.
Ответ написан
Комментировать
Nightmare1
@Nightmare1
Программист
local table1 = { [1] = "q", [2] = "p" }
local table2 = {[1] = "q", [2] = "p",  [3] = "f"}

local values_not_exists = {}
for k1,  v1 in pairs(table1) do
  for k2, v2 in pairs(table2) do
    if table1[k2] == nil then
      table.insert(values_not_exists, v2)
    end
    for i, v in ipairs(table1) do
      if v ~= v2 then table.insert(values_not_exists, v)
    end
  end
end

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


Не тестировал, но должно выдать результат.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы