Filter list if objects
It there any way to filter list by object attribute?
There is a 'contains' function to look for specific items and also a 'sortList' one to ... sort a list :)
Check the documentation for details.
Otherwise, would you have an example list and explain what you would like to filter? More specific information would help, it all depends on what you try to achieve.
Live Long and Tinker
local b1 = object end b1.y = 1
local b2 = object end b2.y = 1
local b22 =object end b22.y = 1
local b3 = object end b3.y = 2
local b4 =object end b4.y = 2
my_list = [b1,b2,b3,b4,b22]
// Here I want to get list of all objects from my_list // where y = 2
Is something like this what you are looking for?
objects =  // will contain all of the objects where y = 2 after the below code for obj in my_list if obj.y == 2 then // condition to add to list objects.push(obj) // add to object list end end
Ahhh, now we are getting somewhere. At least now it's clear what you are looking for.
Possible? Yes. ... Do I know how? No. LOL, one for the experts here and not for a tinkerer like me.
One can extend the List prototype for sure, similar to this:
// filter object.index by value List.filterObj = function(index,value) local objects =  for obj in this if obj[index] == value then objects.push(obj) end end return objects end local b1 = object end b1.y = 1 local b2 = object end b2.y = 1 local b22 =object end b22.y = 1 local b3 = object end b3.y = 2 local b4 =object end b4.y = 2 my_list = [b1,b2,b3,b4,b22] filtered = my_list.filterObj("y",2)
That works, but is not as flexible as you want. Where my knowledge ends is the function call the way you want it.
My_list.filter(obj.y ==2) won't work by what know.
'obj.y==2' would be evaluated by the interpreter and passed through as false/true result.
The function call would have to look like this (I think):
My_list.filter(function() ?.y==2 end), same as one would have to do for the
But I have no clue how that has to be processed inside the extension itself.
Curious to see the solution myself :)
P.S. I re-posted this on the discord channel, response there is sometimes faster :)
Thanks for all this info. Function way looks like good alternative for what I want to do.
Also can you provide discord so I can join and get more insight.
List.filter doesn't seem to be documented, but it exists and seems to be what you need (and what @TinkerSmith was suggesting).
You can just call it and give it a function that returns true when your intended condition is met.
This code should work:
filtered_list = my_list.filter( function(o) return o.y == 2 end )
Works for values and objects.