AddUnique (Stringlist function): Difference between revisions

From m204wiki
Jump to navigation Jump to search
m (1 revision)
mNo edit summary
Line 1: Line 1:
{{Template:Stringlist:AddUnique subtitle}}
{{Template:Stringlist:AddUnique subtitle}}


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


<ul>
<ul>
Line 12: Line 12:
===Syntax terms===
===Syntax terms===
<table class="syntaxTable">
<table class="syntaxTable">
<tr><th>%rc</th>
<tr><th>%number</th>
<td>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.</td></tr>
<td>A numeric variable to contain the item number of the added <var class="term">string</var class="term"> , or the negative item number of an item that already contains the string.</td></tr>
<tr><th>sl</th>
<tr><th>sl</th>
<td>A <var>Stringlist</var> object.</td></tr>
<td>A <var>Stringlist</var> object.</td></tr>
Line 32: Line 32:
<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)
  %clist:insert(%in, 1)
else
else
%in = -%in
  %in = -%in
%clist:replace(%in, %clist:item(%in) + 1)
  %clist:replace(%in, %clist:item(%in) + 1)
end if
end if
</p>
</p>

Revision as of 00:21, 25 January 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

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