Difference between revisions of "ListUnique"

From Second Life Wiki
Jump to navigation Jump to search
m (<lsl> tag to <source>)
 
(6 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{LSL Header}} __NOTOC__
{{LSL Header}} __NOTOC__
<div id="box">
<div id="box">
== Function: [[list]] ListUnique([[list]] {{LSL Param|lAll) }}; ==
== Function: [[list]] ListUnique([[list]] {{LSL Param|lAll) }}; ==
Line 8: Line 9:




<lsl>
<source lang="lsl2">
list ListUnique( list lAll ) {
list ListUnique( list lAll ) {
     integer i;
     integer i;
     list lFiltered = llList2List(lAll, 0, 0);
     list lFiltered = llList2List(lAll, 0, 0);
     integer iAll = llGetListLength( lAll );
     integer iAll = llGetListLength( lAll );
     for (i = 1; i < iAll; i++) {
     for (i = 1; i < iAll; ++i) {
         if ( llListFindList(lFiltered, llList2List(lAll, i, i) ) == -1 ) {
         if ( llListFindList(lFiltered, llList2List(lAll, i, i) ) == -1 ) {
             lFiltered += llList2List(lAll, i, i);
             lFiltered += llList2List(lAll, i, i);
Line 21: Line 22:
}
}


</lsl>
</source>




Line 35: Line 36:
</div>
</div>


Originated in a November 2004 thread led by Chromal Brodsky in the SL Scripting Forum. http://forums.secondlife.com/showthread.php?t=28137
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


<div>


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)
{
    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;
}
</source>
{{LSLC|Examples|ListUnique}}
{{LSLC|Examples|ListUnique}}
[[Category:LSL_User-Defined Functions]]

Latest revision as of 15:23, 22 January 2015

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;
}