簡體   English   中英

Lua表排序不起作用

[英]Lua table sort does not work

我有下面的程序代碼,試圖對給定的列表進行排序。 我嘗試了各種選項,但仍然無法正常工作。

local List = {}    
List[143] = "143"    
List[145] = "145"    
List[120] = "120"       
List[178] = "178"   
table.sort(List, compare)

比較功能定義為

function compare(a, b)    
    if tonumber(a) < tonumber(b) then    
        return true    
    end
end

以上table.sort不適用於任何訂單。 我只想將它排序為增加數字順序。 如果您對此有任何想法,請幫助我。 提前致謝

table.sort (以及table.*的其余部分table.*函數)僅針對類似數組的表上的操作進行定義。 這意味着具有1..n連續整數鍵的表。 您的表格不符合這些標准。

該表的鍵不滿足該功能的要求。 密鑰必須從1開始並按順序增加到N,按照Lua ref手冊 (“按給定順序對表格元素進行排序,就地,從table[1]table[n] ”)。 嘗試

local List = {}
List[1] = "143"    
List[2] = "145"    
List[3] = "120"       
List[4] = "178"   
table.sort(List, compare)

甚至更好

local List = {"143", "145", "120", "178"}
table.sort(List, compare)

表中的鍵值對沒有穩定的順序。 對於每次運行pairsnext函數,您可能會看到不同的鍵值對序列。 (據推測,由於在表格中添加或刪除,序列可能會發生變化。)

除了設置或獲取特定鍵之外,其他表操作使用正整數鍵。 maxn獲取沒有nil值的最大鍵n。 其他人認為密鑰是連續的。 對於這樣的表,正整數鍵可以被認為具有確定的范圍並且是有序的,因此排序是有意義的。

List中的正整數鍵不是連續的。 因此, sort的行為沒有用(並且通常是非確定性的)。

也許,你需要像所有正整數鍵這樣的操作:

local values = {}
-- extract values from positive integer keys
for key, value in pairs(List)
    if (type(key) = "number") and key > 0 then
        table.insert(values, value)
        List[key] = nil    
    end
end
-- sort and restore them to the table
table.sort(values, function(a,b) return tonumber(a)<tonumber(b) end)
for key, value in values
    List[key] = value
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM