检查Lua表中相同的元素?

时间:2017-01-12 20:10:35

标签: lua

你如何检查一张桌子上有三个相同的元素(寻找三个L's)?

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

真的很感激一些帮助!

编辑:好的我已经得到了这个,但是即使有三个或更多的L's(每次检查都这样做五次,它也只输出错误)。对不起,如果我似乎想要获取它的代码,我真的想学习! :)

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

3 个答案:

答案 0 :(得分:0)

我不会给你任何代码,因为你没有表现出任何解决问题的努力。

如何检查表格中是否有三个相同的元素?好吧,你算一算。

循环遍历表格,并为每个不同的值创建一个新计数器。你可以使用另一个表。一旦其中一个计数器达到3,就会知道你有三个相同的值。

答案 1 :(得分:0)

你快到了。您需要针对v测试值'L',而不是键k。此外,我想你想在扫描结束后只打印一次消息;如果是这样,将if语句放在for循环之外。 (在这种情况下,您也应该在for循环之外定义count,否则一旦结束就不会看到它。)

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

答案 2 :(得分: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))