2016-08-23 1 views
2

숫자가 {"192", "127", "114", "186"} 인 자연 숫자 키와 문자열 값이있는 특정 테이블이 있는데 테이블을 주문할 수 있으며 다른 테이블은 순서가 지정된 테이블의 서브 세트이지만 {"114", "192"}과 같은 순서가 맞지 않습니다. 어떻게 정렬 된 테이블에 따라 후자를 정렬 할 수 있습니까 ???다른 정렬 된 테이블에 따라 테이블을 정렬하는 방법은 무엇입니까?

+0

문자열 값을 number로 전송할 수 없습니다. –

답변

2

"할 수있는 일은 문자열을"정렬 된 테이블 "의 위치에 매핑하는 도우미 테이블을 만드는 것입니다. 이렇게하면 두 문자열이 다른 문자열보다 먼저 나타나야합니다.

그런 다음이 도우미 테이블을 사용하여 정렬에 대한 비교 함수를 구현할 수 있습니다. 루아에서는 table.sort에 사용자 지정 비교 함수 인 선택적 매개 변수가 있습니다. 이 비교 함수는 표 (s1s2)의 값 쌍을 허용해야하며 원하는 순서에 따라 s1 < s2 인 경우 true을 반환해야합니다.

ordered_table = {"192", "127", "114", "186"} 

indexes = {} 
for i, s in ipairs(ordered_table) do 
    indexes[s] = i 
end 

unordered_table = {"114", "192"} 
table.sort(unordered_table, function(s1, s2) 
    local i1 = assert(indexes[s1]) 
    local i2 = assert(indexes[s2]) 
    return i1 < i2 
end) 
관련 문제