Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

How can i sort the second value of a table?

Asked by
Simnico99 206 Moderation Voter
6 years ago
Edited 6 years ago

I need the table Ores to be sorted but the first value is an object and i need it to be sorted by the Magnitude wich is the second value

    for _, Ore in pairs(SpotObjects:GetChildren()) do
        if Ore:IsA("BasePart") then
            if Ore.Lvl1.Transparency == 0 then
                OreMagnitude = (HumanoidRootPart.Position - Ore.Position).Magnitude     
                Ores[Ore] = OreMagnitude
            end
        end
    end
    table.sort(Ores)
    for OresObject, i in pairs(Ores) do
        print(OresObject, i)
    end    

When i do print its not printing it in order

1 answer

Log in to vote
2
Answered by
cabbler 1942 Moderation Voter
6 years ago

table.sort does not work on dictionaries; infact it is impossible to sort dictionaries. If your goal's to end up with an ore array sorted close to far, I have a better script:

local RootPart = --?
local ores = {}
--create arbitrary array of ores
for _,ore in ipairs(SpotObjects:GetChildren()) do
    if ore:IsA("BasePart") and ore.Lvl1.Transparency==0 then
        ores[#ores+1]=ore
    end
end

--custom sort; sort() takes an optional function which manually compares values
--think of the default function as: function(a,b) return a < b end

table.sort(ores,function(ore1,ore2)
    --comparing magnitudes will sort by distance
    local mag1 = (ore1.Position-RootPart.Position).magnitude
    local mag2 = (ore2.Position-RootPart.Position).magnitude
    --you can flip the "<" to sort greatest-to-least
    return mag1 < mag2
end)

print(unpack(ores))

might be typos but I hope you get it. (pls dont simply ignore like some ppl e.e)

Ad

Answer this question