1
數組的我已經從我的它是如何工作在Python內存,單個陣列(表)的工作書面lua二進制搜索功能。二進制搜索陣列在Lua
function bisect_left(a, x, lo, hi)
lo = lo or 1
hi = hi or nil
if lo < 0 then
error('lo must be non-negative')
end
if hi == nil then
hi = #a
end
while lo < hi do
mid = math.floor((lo+hi)/2)
if a[mid] < x then
lo = mid+1
else
hi = mid
end
end
return lo
end
但後來我遇到了需要搜索排序數組(表的表)。它們是由指數1
squares = {{300, 400, 123456, 9}, {400, 500, 323456, 9}, {420, 610, 5123456, 9}, {530, 700, 8123456, 9}, {840, 960, 9123456, 1}}
排序在Python我會做類似超載的比較操作CMP像
Class overload(object):
def __init__(self, value, index):
self.value = value
self.index = index
def __cmp__(self, other):
return cmp(self.value, other[self.index])
什麼是在Lua做到這一點的最快方法?我可以想到(我認爲)慢的方法來做到這一點,但我的功能編程經驗不足讓我懷疑是否有一種我永遠不會猜到的方式。
不應返回LO是在循環後,沒有在循環裏? – dasblinkenlight
我猜測,你可以使用'__eq','__le'和'__lt' [元表事件](http://lua-users.org/wiki/MetatableEvents)用於這一目的。和'__newindex'用於生成適當的表。 試圖拿出簡略說明代碼段。 – Kamiccolo
謝謝dasblinkenlight!一連寫了lua一天,所有的「結束」都不停地絆倒我 – Handloomweaver