Я перешел на многие ответы здесь, поскольку я мог найти, что у меня были названия, которые я считал достаточно близко к моей проблеме, чтобы заглянуть. Я не видел, чтобы кто-то имел мою точную проблему, поэтому я задаю вопрос, я надеюсь, что я просто незнаю с простым фактом.Lua Table Sorting 2 сравнивает
Я пытаюсь закодировать таблицу, в которой записываются HP (int) и расстояние (boolean), а затем сортируются 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. Где я потерпел неудачу в своих тестах, было elseif y.range return false. Мы делаем это, чтобы помочь корректно сортировать значение y правильно? – Bubba911
@ Bubba911 В этом случае 'x.range' является' false', тогда как 'y.range' является' true', поэтому 'x' должно быть после' y', независимо от значения 'hp'. –
Ty для пояснения: :) Мой разум все еще обертывался вокруг него. После словесного произнесения всего вслух себе пару раз, вы сказали, что я придумал (после публикации). Так здорово слышать, что я понимаю это правильно! Еще раз спасибо, надеюсь, у вас отличный день, сэр. – Bubba911