Using iterators
Simple iteration
For both ArrayList
and HashTable
:
function ListKeyValue(Collection data)
{
local AcediaObject key, value;
local CollectionIterator iter;
for (iter = data.Iterate(); !iter.HasFinished(); iter.Next())
{
key = iter.GetKey();
value = iter.Get();
// Do what you want here
_.memory.Free(key);
_.memory.Free(value);
}
iter.FreeSelf();
}
Skipping none
values
function ListKeyValue(Collection data)
{
local AcediaObject key, value;
local CollectionIterator iter;
iter = data.Iterate().LeaveOnlyNotNone();
while (!iter.HasFinished())
{
key = iter.GetKey();
value = iter.Get();
// Do what you want here
_.memory.Free(key);
_.memory.Free(value);
iter.Next();
}
iter.FreeSelf();
}
Iteration over Text
keys only
Text keys are only relevant for HashTable
s:
function ListKeyValue(HashTable data)
{
local AcediaObject key, value;
local Text textKey;
local CollectionIterator iter;
for (iter = data.Iterate(); !iter.HasFinished(); iter.Next())
{
key = iter.GetKey();
value = iter.Get();
textKey = Text(key);
if (textKey != none)
{
Log(textKey.ToString() $ ":"
@ _.text.IntoString(_.json.Print(value)));
}
_.memory.Free(key);
_.memory.Free(value);
// `textKey` is the same reference as `key`!
}
iter.FreeSelf();
}