数组 – Lua中的不区分大小写的数组

前端之家收集整理的这篇文章主要介绍了数组 – Lua中的不区分大小写的数组前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试为WoW编程一个插件(在lua中).这是一个基于特定单词的聊天过滤器.我无法弄清楚如何使这些单词的数组不区分大小写,以便该单词的任何大写/小写组合与数组匹配.任何想法将不胜感激.谢谢!
  1. local function wordFilter(self,event,msg)
  2. local keyWords = {"word","test","blah","here","code","woot"}
  3. local matchCount = 0;
  4. for _,word in ipairs(keyWords) do
  5. if (string.match(msg,word,)) then
  6. matchCount = matchCount + 1;
  7. end
  8. end
  9. if (matchCount > 1) then
  10. return false;
  11. else
  12. return true;
  13. end
  14. end

解决方法

>在函数之外定义关键字.否则你就是在重新创造
桌子每次都只是为了把它抛到一边,浪费时间
在创作和GC上.
>将keyWords转换为匹配的模式
大写和小写字母.
>您不需要捕获的数据
来自string,所以使用string.find获取速度.
>根据你的意见
逻辑,如果你有多个比赛你发出’假’的信号.以来
你只需要一场比赛,你不需要计算它们.回来吧
你一打它就会假的.节省您检查所有时间的时间
剩下的话也是.如果以后你决定要多个
匹配,你还是最好在循环中检查它并尽快返回
你达到了预期的数量.
>不要使用ipairs.从1到数组长度的循环比简单慢,并且在Lua 5.2中不推荐使用ipairs.
  1. local keyWords = {"word","woot"}
  2. local caselessKeyWordsPatterns = {}
  3.  
  4. local function letter_to_pattern(c)
  5. return string.format("[%s%s]",string.lower(c),string.upper(c))
  6. end
  7.  
  8. for idx = 1,#keyWords do
  9. caselessKeyWordsPatterns[idx] = string.gsub(keyWords[idx],"%a",letter_to_pattern)
  10. end
  11.  
  12. local function wordFilter(self,msg)
  13. for idx = 1,#caselessKeyWordsPatterns do
  14. if (string.find(msg,caselessKeyWordsPatterns[idx])) then
  15. return false
  16. end
  17. end
  18. return true
  19. end
  20.  
  21. local _
  22. print(wordFilter(_,_,'omg wtf lol'))
  23. print(wordFilter(_,'word man'))
  24. print(wordFilter(_,'this is a tEsT'))
  25. print(wordFilter(_,'BlAh bLAH Blah'))
  26. print(wordFilter(_,'let me go'))

结果是:

  1. true
  2. false
  3. false
  4. false
  5. true

猜你在找的Lua相关文章