table.sort()
Część sekcji Logika i przepływ programu ścieżki Lua w Coddy. Lekcja 7 z 54.
Podczas pracy z tabelami w postaci listy często trzeba uporządkować dane w określonej kolejności. Lua udostępnia funkcję table.sort(), która sortuje elementy tabeli w miejscu, czyli modyfikuje oryginalną tabelę zamiast tworzyć nową.
Podstawowa składnia jest prosta:
table.sort(myTable)Domyślnie table.sort() układa liczby w kolejności rosnącej, a ciągi znaków alfabetycznie. Oto przykład z listą wyników:
local scores = {85, 42, 91, 67, 55}
table.sort(scores)
-- scores to teraz {42, 55, 67, 85, 91}W przypadku ciągów znaków sortowanie odbywa się w kolejności alfabetycznej:
local names = {"Charlie", "Alice", "Bob"}
table.sort(names)
-- names ma teraz wartość {"Alice", "Bob", "Charlie"}Czasami domyślne sortowanie nie jest tym, czego potrzebujesz. Możesz przekazać własną funkcję porównującą jako drugi argument, aby określić, jak porównywane są elementy. Ta funkcja przyjmuje dwa elementy i zwraca true, jeśli pierwszy powinien znaleźć się przed drugim:
local numbers = {5, 2, 8, 1}
table.sort(numbers, function(a, b)
return a > b -- Sortuj w kolejności malejącej
end)
-- numbers ma teraz wartość {8, 5, 2, 1}Funkcja table.sort() działa tylko z tablicami w stylu listy, które mają kolejne klucze całkowite zaczynające się od 1. To potężne narzędzie do porządkowania danych przed ich wyświetleniem lub przetwarzaniem w określonej kolejności.
Wyzwanie
ŁatwyNapisz funkcję sortScoresDescending, która przyjmuje tablicę scores i zwraca sformatowany ciąg znaków z posortowanymi wynikami w kolejności malejącej.
Użyj table.sort() z niestandardową funkcją porównującą, aby uporządkować wyniki od najwyższego do najniższego, a następnie użyj table.concat(), aby połączyć je w jeden ciąg znaków rozdzielony przecinkami.
Parametry:
scores(tablica): tablica w formie listy zawierająca wyniki liczbowe
Zwraca: Ciąg znaków z wynikami posortowanymi od najwyższego do najniższego i rozdzielonymi przecinkami. Format: 95,87,76,54
Spróbuj swoich sił
function sortScoresDescending(scores)
-- Napisz kod tutaj
end
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i przepływ programu
1Zaawansowane iterowanie po tabelach
Iterowanie za pomocą pairs()Iterowanie za pomocą ipairs()pairs() a ipairs()Powtórka — karta postaci2Więcej funkcji biblioteki table
table.concat()Tworzenie tabel i unpack()table.sort()Sortowanie niestandardowe za pomocą funkcjiPodsumowanie — tablica najlepszych wyników5Projekt: silnik tekstowej gry przygodowej
Konfiguracja projektu: pokójŁączenie pokoiPoćwicz samodzielnie: Kompilator Lua online