AddUnique (Stringlist function): Difference between revisions

From m204wiki
Jump to navigation Jump to search
m (consistent example formatting)
m (consistent example formatting)
Line 31: Line 31:
<p class="code">%in = %olist:addUnique(%data)
<p class="code">%in = %olist:addUnique(%data)
if %in gt 0 then
if %in gt 0 then
  %clist:insert(%in, 1)
<p class="code">%clist:insert(%in, 1)
</p>
else
else
  %in = -%in
<p class="code">%in = -%in
  %clist:replace(%in, %clist:item(%in) + 1)
%clist:replace(%in, %clist:item(%in) + 1)
</p>
end if
end if
</p></ol>
</p></ol>

Revision as of 22:35, 6 February 2011

Conditionally add an item to a Stringlist (Stringlist class)


This callable method adds an item to a Stringlist if an identical item is not already present. It adds the item to the end of the Stringlist. AddUnique accepts one argument and returns one of the following:

  • The item number of the added string.
  • The negative of the item number that exactly matches the string being added.

Syntax

[%number =] sl:AddUnique( string)

Syntax terms

%number A numeric variable to contain the item number of the added string, or the negative item number of an item that already contains the string.
sl A Stringlist object.
string A string that is to be added to the Stringlist.

Usage notes

  • All errors in AddUnique result in request cancellation.
  • AddUnique always adds the indicated string to the end of the Stringlist, but it does not add it if there is already an identical Stringlist item on the Stringlist.
  • AddUnique does not assume any order for the Stringlist, so it sequentially scans the entire Stringlist for matches to the string being added. Because of this, it is generally more expensive to use than AddUniqueOrdered for very large Stringlists. AddUniqueOrdered, however, may not be usable in all cases -- for example, if the target Stringlist starts out unordered.

Examples

  1. AddUnique returns the item number added (if no match was found) or the negative item number of the matching item (if one was found). This return code makes it easy to maintain a parallel Stringlist that contains, say, a count of the number of times a given value occurred, that is, was passed as a string to AddUnique. The following example illustrates such an approach:

    %in = %olist:addUnique(%data) if %in gt 0 then

    %clist:insert(%in, 1)

    else

    %in = -%in %clist:replace(%in, %clist:item(%in) + 1)

    end if

See also