加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

在lua中按索引值比较两个索引表

发布时间:2020-12-14 21:48:10 所属栏目:大数据 来源:网络整理
导读:我试图比较两个相等长度的表和一个函数,因为我不知道有任何其他方法这样做.但是,使用以下功能,它无法注册,我也不知道为什么.我希望有人可以提供对此问题的深入了解,或者有更好的方法来比较这两个表. 这些表格使用以下代码填充: str = "parameters determine
我试图比较两个相等长度的表和一个函数,因为我不知道有任何其他方法这样做.但是,使用以下功能,它无法注册,我也不知道为什么.我希望有人可以提供对此问题的深入了解,或者有更好的方法来比较这两个表.

这些表格使用以下代码填充:

str = "parameters determined by program (all digits)"
tableone = {}
for word in str:gmatch("%d") do table.insert(tableone,word) end

两个表都是相同的,当然除了各个表名.表格正确填充,并在打印时正确显示.为了这个问题,这里有两个表:

tableone = {}
tabletwo = {}
for i=1,4 do table.insert(tableone,i) end
for i=1,4 do table.insert(tabletwo,i) end

显然,这两个表将彼此相等.我写的比较索引表的函数如下:

function comparetables(t1,t2)
matchct = 0
 for i=1,#t1 do
    if t1[i] == t2[i] then
    matchct = matchct + 1
    end
if matchct == #t1 then
return true
end
end

我试过了

print(comparetables(tableone,tabletwo))

看它是否打印“真实”但没有运气.对我而言,它似乎应该没有问题.但事实并非如此.我错过了什么?我已经尝试过像某个人可能已经编写的table.compare函数一样的东西,但找不到这样的运气.谢谢你的任何建议!

附加信息:

我正在比较表格的原因是为了一个主人型游戏.这意味着在比较表时必须遵循以下三条规则.我创建的功能是让我开始,以为我可以从那里工作.

>比较表时,如果数字匹配,则Ccount增加1.
>比较表时,如果值存在于不同的索引位置,则将Pcount增加1

例如,使用值{1,3,4}的值表和{4,4,1}的猜测,它将返回Pcount为2(一个4和1)和一个Ccount为1 (三位在第三位).我认为最困难的部分之一就是要进行比较,以确认猜测中的第二个4不应该增加Pcount.

解决方法

如果你在面向对象的意义上比较比tabley更客观的对象,那么我会看看以lua OO方式实现这些函数.

像这样的东西应该做的伎俩:

GameState = {}
GameState.mt = {}
GameState.mt.fns = {}
GameState.mt.__index =  GameState.mt.fns

function GameState.new(a,b,c,d)
-- TODO: put argument checks here...
  local retval = {}
  retval[1] = a
  retval[2] = b
  retval[3] = c
  retval[4] = d
  setmetatable(retval,GameState.mt)
  return retval
end

function GameState.mt.fns.print( self )
  print(" GameState: ",self[1],self[2],self[3],self[4] )
end

function GameState.mt.__tostring( self )
  return "GameState: "..self[1].." "..self[2].." "..self[3].." "..self[4]
end

function GameState.mt.__eq(self,other)
  -- Check it's actually a GameState,and all its bits match
  return getmetatable(other)==GameState.mt and
    (self[1] == other[1]) and 
    (self[2] == other[2]) and 
    (self[3] == other[3]) and 
    (self[4] == other[4])
end

然后你会像这样使用它:

state1 = GameState.new(1,2,4)
state2 = GameState.new(1,4)

print("State 1 is:")
state1:print()

print("State 2 is:")
print(state2)

print( "state1 == state2 : ",state1 == state2 )

print( "Changing state 2") 
state2[1]=2

print( "state1 == state2 : ",state1 == state2 )

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读