単一の配列 (テーブル) で動作する Python での動作の記憶から、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でこれを行う最速の方法は何ですか? 私はそれを行うための遅い方法を考えることはできますが (私は推測します)、関数型プログラミングの経験がないため、決して推測できない方法があるかどうか疑問に思います。