检查设置位置的字符是否与Lua中的某个值匹配

时间:2019-06-19 11:50:38

标签: optimization lua

我有一个字母字符串,YYYNNN等,并且我想测试第一个字符是Y,还是中间字符是{ {1}}。

这需要在不同的行上多次进行,以检查不同的值。

我确实有一个可行的解决方案(感谢this):

Y

我只是想知道是否有一种更简单的方法,因为我只需要检查字符串中的第一个字母(在这种情况下)是否为matchCode1 = 'YYY' function set(...) local ret = {} for _,k in ipairs({...}) do ret[k] = true end return ret end if set('YYY', 'YYN', 'YNY', 'YNN')[matchCode1] then print('true') else print('false') end

Y可以是matchCode1Y的任意组合,但始终为3个字符。

我要检查的其他情况是第二个字符是N,第三个字符是Y,然后如果所有字符都是Y

任何建议都将受到欢迎!

1 个答案:

答案 0 :(得分:1)

您可以使用string.findstring.find将采用Lua模式并在给定的字符串中搜索匹配项,它将返回char的索引。

此示例仅查看Y的第一个实例:

function checkMatchCode(code)
  startIndex = code:find('Y')

  if startIndex == 1 or startIndex == 2 then
    print(code .. ': true')
  else 
    print(code .. ': false')
  end
end

checkMatchCode('YYY')
checkMatchCode('YNY')
checkMatchCode('NYY')
checkMatchCode('NYN')
checkMatchCode('NNY')
checkMatchCode('NNN')

输出:

YYY: true
YYN: true
YNY: true
NYY: true
NYN: true
NNY: false
NNN: false

您也可以类似地使用string.gmatch来创建匹配结果表

此示例检查字符串中的每个字符是否为Y

function checkMatchCode(code)
  local results = {}

  for char in code:gmatch('.') do
    local charPosition = #results + 1
    if char == 'Y' then
      results[charPosition] = true
    else
      results[charPosition] = false
    end
  end

  if results[1] and results[2] then -- using an and here to show the difference 
    print(code .. ': true')
  else 
    print(code .. ': false')
  end
end

checkMatchCode('YYY')
checkMatchCode('YNY')
checkMatchCode('NYY')
checkMatchCode('NYN')
checkMatchCode('NNY')
checkMatchCode('NNN')

输出:

YYY: true
YYN: true
YNY: false
NYY: false
NYN: false
NNY: false
NNN: false
如果您关心匹配多个字符或使用所有匹配结果的表来替换代码中的其他位置,那么

string.gmatch是一个更强大的选项。

string.find是一种快速检查,它可以告诉您是否至少有1个Y,并且该Y在哪里,它不在乎是1个还是3个{{1 }}是,您只会在第一场比赛中获得相关信息。