Sortera tabell i Lua

10Nov07

———–

När jag satt och lekte med lua i dag lärde jag mig två nya roliga saker, det första är att sortera innehållet i tabeller med hjälp av “callback-funktion” i table.sort. Det andra jag lärde mig var att hantera argumentlista när lua-scriptet anropas. Detta kan jämföras med C-språkets int main(argc, argv[]), det är praktiskt att kunna ta ett (eller flera) argument vid anrop.

#!/usr/bin/env lua

— Desc: Vilkorlig, associerad sortering, Listan Names sorteras
— efter zodiac om argumentet ‘zodiac’ eller ‘name’ anges när man
— anropar scriptet. Anges inget argument eller eller fel argument
— visas hjälpen
— Coder: Fredrik Persson
— E-mail: perrascout@linux.se
— Download/webpage: http://www.shell.linux.se/perra/blog
— Licens: BSD

Names = {Kalle=”Skytt”, Olle=”Fisk”, Sven=”Tvilling”, Arne=”Kräfta”, arne=”Fisk”, kalle=”Jungfru”, Hasse=”Fisk”, Benny=”Våg”}

–sorteringsfunktion
function doSort(arg)
Sorted = {}

for name, zodiac in pairs(Names) do
table.insert(Sorted, {name=name, zodiac=zodiac})
end

if arg == “zodiac” then
table.sort(Sorted, function(A,B) return A.zodiac < B.zodiac end) else table.sort(Sorted, function(A,B) return A.name < B.name end) end for _, Names in ipairs(Sorted) do print( Names.name .. " är " .. Names.zodiac ); end end --Får första argumentet från argumenstlistan function main(args) if args == "help" then print("usage: lua ./test.lua name|zodiac|help") elseif args == "name" or args == "zodiac" then doSort(args) else print("./test.lua help") end end main(...)[/sourcecode] En luatabell är en samling med nyckelvärden i par. Tabellen Names innehåller nycklen "Kalle" med värdet "skytt". Detta låter oss enkelt att sortera tabellen efter nyckel (Kalle) eller efter värdet på nycklen ("Skytt") om vi så önskar.//Fredrik



No Responses Yet to “Sortera tabell i Lua”

  1. Leave a Comment

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s


%d bloggers like this: