当前位置:  开发笔记 > 编程语言 > 正文

在Lua列表中搜索项目

如何解决《在Lua列表中搜索项目》经验,为你挑选了3个好方法。

如果我有这样的项目列表:

local items = { "apple", "orange", "pear", "banana" }

如何检查此列表中是否有"橙色"?

在Python中我可以这样做:

if "orange" in items:
    # do something

Lua中有同等的东西吗?



1> Jon Ericson..:

你可以使用类似于Lua中的Programming的集合:

function Set (list)
  local set = {}
  for _, l in ipairs(list) do set[l] = true end
  return set
end

然后你可以把你的列表放在Set中并测试成员资格:

local items = Set { "apple", "orange", "pear", "banana" }

if items["orange"] then
  -- do something
end

或者您可以直接迭代列表:

local items = { "apple", "orange", "pear", "banana" }

for _,v in pairs(items) do
  if v == "orange" then
    -- do something
    break
  end
end



2> 小智..:

请改用以下表示:

local items = { apple=true, orange=true, pear=true, banana=true }
if items.apple then
    ...
end


这是在Lua中制作(在纯数学意义上)事物的最佳方法.好样的!但是,由于它没有订单概念,因此不一定能回答"在Lua列表中搜索项目?"的一般问题.如果清单顺序很重要

3> Norman Ramse..:

你是第一手看到Lua只有一个数据结构的缺点 - 你必须自己动手.如果你坚持使用Lua,你将逐渐积累一个函数库,以你喜欢的方式操作表.我的库包括列表到集的转换和高阶列表搜索功能:

function table.set(t) -- set of list
  local u = { }
  for _, v in ipairs(t) do u[v] = true end
  return u
end

function table.find(f, l) -- find element v of l satisfying f(v)
  for _, v in ipairs(l) do
    if f(v) then
      return v
    end
  end
  return nil
end

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有