2013-10-03 25 views
3

我正在嘗試練習table.sort ing和表格。我正在採取下表t{}table.sort它由每個名稱的數值。我在將原始表格t{}打印到a{}(我想打印a{}只是爲了清除該問題)時遇到問題。我將在哪裏放置print (和什麼代碼?)成這樣的代碼?試圖檢查我的工作,但如何打印()?

對不起菜鳥,初學者的問題。但我在理解將print()行粘貼到function或代碼來檢查它們的問題時遇到問題。我正在改變returnprint等,我仍然無法掌握這部分。

我欣賞幫助傢伙!

t = { 
    Steve = 4, 
    Derek = 1, 
    Mike = 3, 
    Steph = 8, 
    Mary = 15, 
    Danny = 10 
    } 

function pairsByKeys (t,f) 
    local a = {} 

    for x in pairs (t) do 
     a[#a + 1] = x 
    end 

    table.sort(a,f) 
    local i = 0 
    return function() 
    i = i + 1 
    return a[i], t[a[i]] 
    end 
end 

local timer = os.time() 
repeat until os.time() > timer + 10 

回答

2

pairsByKeys作爲一個迭代函數來實現(如pairs或標準庫提供ipairs),這樣你就可以在一個通用的for聲明像這樣使用它(使用默認的比較功能):

for k,v in pairsByKeys(t) do 
    print(k, v) 
end 

輸出:

Danny 10 
Derek 1 
Mary 15 
Mike 3 
Steph 8 
Steve 4 
+0

衛生署!謝謝。那麼如果我想讓他們按照他們的數值排序名稱,我在代碼中做了什麼錯誤?例如,'Dekek 1'將會是第一個,然後'Mike 3'將會是第二個,等等。 – Pwrcdr87

+0

@ Pwrcdr87該函數被命名爲'pairsByKeys',因爲它的作用是按鍵排序。你需要一個不同的迭代器來按值排序。 –

+1

@ Pwrcdr87一個簡單的方法是建立另一個帶有反向鍵值對的表格,例如'{4 = Steve,1 = Derek}'等等,然後使用'pairsByKeys'打印這個表格。 –

相關問題