Difference between revisions of "ListUnique"
Jump to navigation
Jump to search
m (<lsl> tag to <source>) |
|||
(One intermediate revision by one other user not shown) | |||
Line 9: | Line 9: | ||
< | <source lang="lsl2"> | ||
list ListUnique( list lAll ) { | list ListUnique( list lAll ) { | ||
integer i; | integer i; | ||
Line 22: | Line 22: | ||
} | } | ||
</ | </source> | ||
Line 42: | Line 42: | ||
A *possibly* faster replacement (at least in my experiments in removing duplicate Agent UUIDs from multiple scanners on a sim): | A *possibly* faster replacement (at least in my experiments in removing duplicate Agent UUIDs from multiple scanners on a sim): | ||
< | <source lang="lsl2"> | ||
list nvStripDupes(list DupedList) | list nvStripDupes(list DupedList) | ||
{ | { | ||
integer pos; | integer pos; | ||
list Element; | |||
while (llGetListLength(DupedList) != 0) | while (llGetListLength(DupedList) != 0) | ||
{ | { | ||
Line 59: | Line 60: | ||
return NoDupes; | return NoDupes; | ||
} | } | ||
</ | </source> | ||
{{LSLC|Examples|ListUnique}} | {{LSLC|Examples|ListUnique}} | ||
[[Category:LSL_User-Defined Functions]] | [[Category:LSL_User-Defined Functions]] |
Latest revision as of 15:23, 22 January 2015
LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
Function: list ListUnique(list lAll);
Given a list of elements, strips out any duplicates in that list, and returns the de-duped list.
See also: Lists
list ListUnique( list lAll ) {
integer i;
list lFiltered = llList2List(lAll, 0, 0);
integer iAll = llGetListLength( lAll );
for (i = 1; i < iAll; ++i) {
if ( llListFindList(lFiltered, llList2List(lAll, i, i) ) == -1 ) {
lFiltered += llList2List(lAll, i, i);
}
}
return lFiltered;
}
Example:
list mylist = ListUnique(["A", "A", "B", "C", "C", "B"])
would return the list:
["A", "B", "C"]
Originated in a November 2004 thread led by Chromal Brodsky in the SL Scripting Forum. http://forums-archive.secondlife.com/54/30/28137/1.html
A *possibly* faster replacement (at least in my experiments in removing duplicate Agent UUIDs from multiple scanners on a sim):
list nvStripDupes(list DupedList)
{
integer pos;
list Element;
while (llGetListLength(DupedList) != 0)
{
Element = llList2List(DupedList, 0, 0);
NoDupes += Element;
pos = llListFindList(DupedList, Element);
while ( pos != -1)
{
DupedList = llDeleteSubList(DupedList, pos, pos);
pos = llListFindList(DupedList, Element);
}
}
return NoDupes;
}