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 local …
テーブルが空である(つまり、現在配列スタイルの値もdictスタイルの値も含まれていない)かどうかを判断する最も効率的な方法は何ですか? 現在、私は使用していnext()ます: if not next(myTable) then -- Table is empty end より効率的な方法はありますか? 注:#演算子は、テーブル内の配列スタイルの値のみを操作するため、ここでは十分ではありません。両方とも0を返すため、#{test=2}区別できません。#{}また、テーブル変数が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の方法が機能しないわけではありませんが、これが唯一の方法かどうか疑問に思っています。