2017-01-12 3 views
0

Как вы проверите таблицу для трех одинаковых элементов (ищите три L)?Проверить идентичные элементы в таблице в Lua?

table = {nil, nil, L, nil, L} -> false 
table = {L, L, nil, nil, L} -> true 

Действительно понравилось бы!

EDIT: Хорошо. У меня это есть, но он выводит false, даже если есть три или более L (и делает это пять раз для каждой проверки?). Извините, если мне показалось, что я пытался получить код для этого, я искренне стараюсь учиться! :)

for k, v in pairs(threeL_table) do 
local count = 0 
    if k == 'L' then 
    count = count + 1 
    end 
    if count == 3 then 
    print('true') 
    else 
    print('false') 
    end 
end 
+0

10 Вы не должны использовать таблицу в качестве имени таблицы, поскольку таблица уже является существующей таблицей, предоставляемой Lua, которая содержит функции для обработки таблиц. если вы присвоите новое значение таблице, вы не сможете использовать эти функции. – Piglet

+0

@ Piglet Я знаю, это просто способ показать, что я ищу :) –

+0

См. http://stackoverflow.com/questions/41543754/как к регистрации по прибытии на неповторения-из-Lua-таблицы стоимости. – lhf

ответ

0

Вы были почти там. Вам необходимо проверить значения v на 'L', а не на клавиши k. Кроме того, я предполагаю, что вы хотите распечатать сообщение только один раз после завершения сканирования; если это так, поместите оператор if вне цикла for. (В этом случае вы также должны определить count вне цикла for-loop, иначе вы не увидите его, как только оно закончится).

local count = 0 
for k, v in pairs(threeL_table) do 
    if v == 'L' then -- you need to check for the values not the keys 
    count = count + 1 
    end 
end 
if count == 3 then -- move this out of the for-loop 
    print('true') 
else 
    print('false') 
end 
0

Я не дам вам никакого кода, так как вы не проявляли никаких усилий для решения проблемы.

Как бы вы проверили таблицу на три идентичных элемента? Ну, вы их считаете.

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

+0

Спасибо за начало. Я до сих пор: «для k, v в парах (триL_table) do ' ' print (k, v) ' ' end ', который печатает либо L, либо ничего. –

+0

Если бы вы могли обратиться к моему правлению, это было бы здорово! EDIT: Nevermind! Я сравнивал k, а не v! Большое спасибо за то, что поставили меня на правильный путь. –

0

Другой способ решить эту проблему.

function detectDup(t,nDup) 
    table.sort(t) 
    local tabCount = {} 
    for _,e in ipairs(t) do 
    tabCount[e] = (tabCount[e] or 0) + 1 
    if tabCount[e] >= 3 then 
     print("The element '" .. e .. "' has more than 3 repetitions!") 
     return true 
    end 
    end 
    return false 
end 

print(detectDup({'L', 'L','A','B'},3)) 
print(detectDup({'L', 'L','A','B','L',},3)) 
Смежные вопросы