2015-02-03 2 views
1

В Python мы можем использовать set или itertools, чтобы найти подмножество одного списка другого списка, как мы будем делать то же самое в Lua?Как определить, является ли массив подмножеством другого массива?

a = {1,2,3} 
b = {2,3} 

Как проверить, что b является подмножеством?

+1

Можете ли вы привести пример того, что вы пытаетесь достичь? – lhf

ответ

1

Наборы могут быть реализованы в Lua с использованием таблиц в качестве ориентиров для тестирования членства (as done in Programming in Lua). Ключами в таблице являются элементы набора, а значения - true, если элемент принадлежит к набору или nil в противном случае.

a = {[1]=true, [2]=true, [3]=true} 
b = {[2]=true, [3]=true} 

-- Or create a constructor 
function set(list) 
    local t = {} 
    for _, item in pairs(list) do 
     t[item] = true 
    end 
    return t 
end 

a = set{1, 2, 3} 
b = set{2, 3} 

Письменный набор операций является простым в этой форме, а также (as here).

function subset(a, b) 
    for el, _ in pairs(a) do 
     if not b[el] then 
     return false 
     end 
    end 
    return true 
end 

print(subset(b, a)) -- true 
print(subset(set{2, 1}, set{2, 2, 3, 1})) -- true 

a[1] = nil -- remove 1 from a 
print(subset(a, b)) -- true 

Если a и b должны оставаться в форме массива, то подмножество может быть реализована следующим образом:

function arraysubset(a, b) 
    local s = set(b) 
    for _, el in pairs(a) -- changed to iterate over values of the table 
     if not s[el] then 
     return false 
     end 
    end 
    return true 
end