2013-10-03 7 views
3

Я пытаюсь практиковать table.sort ing и таблицы в целом. Я беру таблицу t{} ниже и table.sort это числовое значение каждого из имен. У меня возникли проблемы с печатью исходной таблицы t{} после того, как она была отсортирована в a{} (я пытаюсь распечатать a{}, чтобы это было ясно). Где бы я разместил print (и какой код?) в код вроде этого?Пытается проверить мою работу, но как печатать()?

Извините за новобранец, вопрос начинающего. Но у меня возникла проблема с пониманием того, где следует вставлять строки print() в function или код для их проверки. Я меняю return с print и т. Д. Я до сих пор не могу понять эту часть.

Я ценю помощь ребятам!

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

DOH! Спасибо. Ну, что я делаю неправильно в своем коде, если я хочу, чтобы они сортировали имена по их числовому значению? Например, 'Dekek 1' будет первым, тогда' Mike 3' будет вторым и т. Д. – Pwrcdr87

+0

@ Pwrcdr87 Функция называется 'pairsByKeys', потому что она выполняет сортировку по ключу. Вам нужен другой итератор для сортировки по значению. –

+1

@ Pwrcdr87 Простым способом сделать это является создание другой таблицы с парами обратного ключа-значения типа '{4 = Steve, 1 = Derek}' и т. Д. И затем используйте 'pairsByKeys' для печати этой таблицы. –

Смежные вопросы