私は、私が調べるべき問題の近くにあると思ったタイトルを持っていることがわかったので、ここで多くの答えを出しました。私は私の正確な問題を抱えている人は見ていないので、私は単純な事実に無知であることを願っています。ルアテーブルソート2比較
私は、HP(int)と距離(ブール値)を記録し、HPの上のRangeにあるものだけで並べ替えるテーブルをコーディングしようとしています。
local tableTest = {
{hp = 64, range = true, name="Frank"},
{hp = 100, range = true, name="Joe"},
{hp = 2, range = false, name="Jim"},
{hp = 76, range = true, name="Tim"},
{hp = 17, range = false, name="Jill"},
{hp = 16, range = true, name="Phillip"},
}
-- Sort by HP and Range to find lowest Unit in Range.
table.sort(tableTest, function(x,y) return x.hp < y.hp and x.range end)
for i=1, #tableTest do print(tableTest[i].name, tableTest[i].hp) end
このため出力は次のとおりです。
Phillip 16
Jim 2
Frank 64
Jill 17
Tim 76
Joe 100
私はこのことから期待していた出力は次のようになります。
Phillip 16
Frank 64
Tim 76
Joe 100
Jim 2
Jill 17
私はこれがどれだけの私の一部に誤解である祈りますtable.sortは、このような複数のチェックで動作します(私はあなたがこのような変数を宣言する方法に近いと仮定しました)。
編集 追加情報 - 私はrange=false
インデックスは、テーブルに置かれている場所の順序を変更する場合は、出力が変化だけでなく(まだ正しくありません)。これらの値は、ソート後に異なるインデックスにソートされます。
ty ty!私は私が間違っていたことをちょっと理解していると思う。私は真実を返すという点で考えていました。だから私がこれを正しく理解するならば、私はこの権利を読んでいることを確認したいだけです。 まず、両方の範囲が真であることを確認した後、HPで並べ替えます。両方の範囲が真でない場合は、xが真の範囲を持っているかどうかを確認し、trueを返します。そうでなければ、yに範囲があり、falseを返します。両方が偽の場合、HPは範囲外のものをHPでソートします。 テストで失敗した場所は、elseif y.rangeがfalseを返すことでした。私たちは、yの値を正しく並べ替えるのを助けるためにこれを行いますか? – Bubba911
@ Bubba911その場合、 'x.range'は' false'ですが、 'y.range'は' true'なので 'x'は' hp'の値にかかわらず 'y'の後になければなりません。 –
それを明らかにするためのタイ:)私の心はまだそれの周りを包んでいた。あなたが言ったことは、私が口頭で(投稿後に)思いついたことです。それは私の理解が正しいことを聞いて大変です!もう一度ありがとう、素晴らしい日を過ごすことを願っています。 – Bubba911