Difference between revisions of "ListCompare"

From Second Life Wiki
Jump to navigation Jump to search
(Combine LSO and Mono versions. The attempt at the "Voodoo trick" was actually wasting space in the LSO version.)
m (<lsl> tag to <source>)
 
Line 10: Line 10:
|cat2=Library
|cat2=Library
|cat3=User-Defined Functions
|cat3=User-Defined Functions
|examples=<lsl>integer r = ListCompare([1, 2.0, "3"], [1, 2.0, "3"]); // Returns TRUE
|examples=<source lang="lsl2">integer r = ListCompare([1, 2.0, "3"], [1, 2.0, "3"]); // Returns TRUE
integer s = ListCompare([1, 2.0, 3], [1, 2.0, "3"]);  // Returns FALSE
integer s = ListCompare([1, 2.0, 3], [1, 2.0, "3"]);  // Returns FALSE
integer t = ListCompare([], [1, 2.0, "3"]);            // Returns FALSE</lsl>
integer t = ListCompare([], [1, 2.0, "3"]);            // Returns FALSE</source>
}}
}}


= Implementation for LSO or MONO =
= Implementation for LSO or MONO =
<lsl>
<source lang="lsl2">
integer ListCompare(list a, list b)  
integer ListCompare(list a, list b)  
{
{
Line 28: Line 28:
     // Which we return as TRUE or FALSE respectively     
     // Which we return as TRUE or FALSE respectively     
}
}
</lsl>
</source>

Latest revision as of 15:18, 22 January 2015

Summary

Function: integer ListCompare( list a, list b );

Efficiently compares two lists for equality (same contents in the same order).
Returns an integer TRUE if the lists are equal, FALSE if not.

• list a The first list to compare.
• list b The second list to compare.

Examples

integer r = ListCompare([1, 2.0, "3"], [1, 2.0, "3"]); // Returns TRUE
integer s = ListCompare([1, 2.0, 3], [1, 2.0, "3"]);   // Returns FALSE
integer t = ListCompare([], [1, 2.0, "3"]);            // Returns FALSE

Implementation for LSO or MONO

integer ListCompare(list a, list b) 
{
    if (a != b)        return FALSE;    // Note: This is comparing list lengths only

    // The next line is only needed if compiling with LSO
    if (a == [])       return TRUE;     // both lists are empty (as both lists are the same length)

    return !llListFindList(a, b);  
    // As both lists are the same length, llListFindList() can only return 0 or -1 
    // Which we return as TRUE or FALSE respectively    
}