내가보기에 내 문제에 충분히 가깝다고 여겨지는 제목을 찾았을 때 나는 여기에 답을 많이 읽었습니다. 나는 정확한 문제가있는 사람을 보지 못했기 때문에 단순한 사실에 무지하다는 희망을 묻고있다.루아 테이블 정렬 2 비교
HP (int)와 거리 (부울)를 기록한 테이블을 코딩 한 다음 Range에있는 맨 위에있는 HP 만 정렬하려고합니다.
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를 반환합니다. 둘 다 false이면 HP가 범위를 벗어난 값을 정렬합니다. 테스트에서 실패한 부분은 elseif y.range false입니다. y 값을 올바르게 정렬 할 수 있도록이 작업을 수행합니까? – Bubba911
@ Bubba911이 경우'x.range'는'false'이고'y.range'는'true'이므로'x'는'hp'의 값에 상관없이'y' 다음에 있어야합니다. –
Ty : 내 마음은 여전히 그 주위에 감싸고 있었다. 구두로 나에게 큰 소리로 모두 말한 후에, 내가 말한 것은 (게시 한 후) 내가 생각한 것입니다. 그래서 그것은 내 이해가 정확하다는 것을 듣는 것이 대단합니다! 다시 한번 감사드립니다, 좋은 하루 되시길 바랍니다. – Bubba911