给定一个x,y点数组,如何按顺时针顺序(在它们的整体平均中心点附近)对该数组的点排序?我的目标是将这些点传递给线创建函数,以得到看起来很“实心”的东西,尽可能凸,没有线相交。 对于它的价值,我正在使用Lua,但任何伪代码都将不胜感激。 更新:作为参考,这是基于Ciamej出色答案的Lua代码(忽略我的“ app”前缀): function appSortPointsClockwise(points) local centerPoint = appGetCenterPointOfPoints(points) app.pointsCenterPoint = centerPoint table.sort(points, appGetIsLess) return points end function appGetIsLess(a, b) local center = app.pointsCenterPoint if a.x >= 0 and b.x < 0 then return true elseif a.x == 0 and b.x == 0 then return a.y > b.y end …
确定表是否为空(即,当前既不包含数组样式值也不包含dict样式值)的最有效方法是什么? 目前,我正在使用next(): if not next(myTable) then -- Table is empty end 有没有更有效的方法? 注意:#此处的运算符不足,因为它仅对表中的数组样式值进行运算-因此与之没有#{test=2}区别,#{}因为两者都返回0。另外请注意,检查表变量是否nil不足,因为我不是在寻找nil个值,而是具有0个条目的表(即{})。
有没有检查表是否包含值的方法?我有自己的(幼稚)功能,但是我想知道是否为此存在“官方”功能?还是更有效率的... function table.contains(table, element) for _, value in pairs(table) do if value == element then return true end end return false end 顺便说一句,我使用此函数的主要原因是将表用作集合,即没有重复的元素。还有其他我可以使用的东西吗?
我有一个lua表,用作哈希图,即带有字符串键: local map = { foo = 1, bar = 2 } 我想“弹出”该表的键所标识的元素。有一种table.remove()方法,但是只需要删除元素的索引(即数字),而不需要通用键。我希望能够做到table.remove(map, 'foo'),这就是我的实现方式: function table.removekey(table, key) local element = table[key] table[key] = nil return element end 有更好的方法吗?
我在Lua中有一个字符串,想要迭代其中的各个字符。但是我尝试过的代码都没有用,而官方手册仅显示了如何查找和替换子字符串:( str = "abcd" for char in str do -- error print( char ) end for i = 1, str:len() do print( str[ i ] ) -- nil end
在Lua Wiki中,我找到了一种定义缺少参数的默认值的方法: function myfunction(a,b,c) b = b or 7 c = c or 5 print (a,b,c) end 那是唯一的方法吗?PHP样式myfunction (a,b=7,c=5)似乎无效。并不是说Lua方法行不通,我只是想知道这是否是唯一的方法。