Map (table/array) sorting

A place for discussion of making game modifications.
Post Reply
gaerzi
Posts: 210
Joined: Wed Jul 10, 2019 1:30 pm

Map (table/array) sorting

Post by gaerzi »

So I'm trying to get a list of key=value sorted by order of decreasing value, and I can't seem to find out how to do that with the available functions from iterators.lua.

Keep in mind that I'm really not an expert in Lua, as I barely understand its syntax. So I've adopted the spairs function found here (renamed as "zpairs" so as to avoid interfering with existing code that calls upon spairs).

So when I have

Code: Select all

	for race, p in zpairs(empire_pop, function(t,a,b) return t[b] < t[a] end)
it works.

But if I try to use rpairs instead, it complains about an "attempt to compare two nil values".
User avatar
sven
Site Admin
Posts: 1622
Joined: Sat Jan 31, 2015 10:24 pm
Location: British Columbia, Canada
Contact:

Re: Map (table/array) sorting

Post by sven »

gaerzi wrote:But if I try to use rpairs instead, it complains about an "attempt to compare two nil values".
I don't actually have the code up, but, if I recall correctly, my rpairs is similar to the 'spairs' code you linked, but the sorting function works differently. In the code you linked, the sorting function is passed a table and 2 keys. In my 'rpairs', I believe the sorting function is just passed 2 keys, so if you want to reference the source table, you need to capture it as an upvalue from your sort function definition.

My 'spairs' functions works sortof similarly. (Though that one doesn't even accept an optional custom sorting function.) Um, I actually got in a big conversation on the Lua mailing list about all these sorts of details almost 10 years ago -- you can still read through the threads if you want to learn more about all the technicalities that come up with this sort of stuff.
gaerzi
Posts: 210
Joined: Wed Jul 10, 2019 1:30 pm

Re: Map (table/array) sorting

Post by gaerzi »

sven wrote:you need to capture it as an upvalue from your sort function definition.
I don't grok Lua enough to know how to do that (all my attempts ended in various error messages) so I'll just keep my zpairs for now.
Post Reply