This version is out of date, covering development from v5.0.0 to v5.12.2. It is maintained here only for inbound reference links from elsewhere.

Jump to the current version of aTbRef.

Tinderbox Icon

List Data Type

List

A semi-colon delimited list of string values; new to v5.6.0. In terms of stored data sets and lists are the same - a string containing one or more semi-colon delimited items. The difference is in the way Tinderbox handles the two data types, as lists may contain duplicate items. Although sets pre-date lists in Tinderbox, lists should be thought of as the underlying form and sets as a refined - de-duplicated - form of list.

Being based on a string, a list's value(s) - including the semicolons - can be up to 8191 characters in total.

Lists, unlike Sets, allow duplicate values. To de-dupe a List, simply put its contents into a Set-type attribute:

$MySet=$MyList; 

Or, from v5.9.2, use the .unique dot-operator:

$MyList=$MyList.unique; 

If $MySet and $MyList both have the value "cats;dogs": the following have different outcomes:

$MySet=$MySet + "dogs" gives "cats;dogs"

$MyList=$MyList + "dogs" gives "cats;dogs;dogs"

The Set attribute doesn't add the duplicate value but the List does; list data values are stored in the order added. Be careful using this method to add a list value as if run in a rule, the terms will be re-added as a new value each time the rule runs!

Also beware an assumed pre-assignment concatenation:

$MyList=$MyList + "gun" + " " + "dogs" gives "cats;gun;dogs" not "cats;gun dogs"

Instead try:

$MyList=$MyList +( "gun" + " " + "dogs") gives "cats;gun dogs"

If setting a list's literal values via action code note the string must the quoted:

$MyList="Frogs;Dogs;Logs" 

Adding and deleting values

With a list you can add/remove individual or multiple values and test its contents. In actions, + adds an item to a set if it is not already present, and - removes it if it is present. Values must be enclosed in double quotes. If $PetTypes' value is "cats;dogs", then:

$PetTypes=$PetTypes+"rabbits" adds the new value

$PetTypes=$PetTypes+"rabbits" unlike a Set, this adds a second instance of "dogs" to the end of the list.

$PetTypes=$PetTypes-"dogs" leaves only "cats" as a value.

Testing (querying) sets & Lists

To test a set or list, use the .contains() operator, syntax AttributeName.contains("tested_value"), returns true if any set/list discrete value exactly matches the the designated tested_value; if case sensitivity is irrelevant for the query use .icontains(). If a user attribute $PetTypes has a value of "dogs;cats" then

$PetTypes.contains("dogs") is true,

but

$PetTypes.contains("dog") is false

This is because set/list matching doesn't allow partial (regex) matches unlike with String-type data.

Other variants:

$PetTypes.contains("Dogs").lowercase is true

$PetTypes.icontains("DOGS") is true

It can be useful to use a stored value as the search pattern, for instance using the name of an agent as the search term:

$PetTypes.contains($MyString) is true

Listing and Exporting sets

The format() action operator offers ways to turn sets into HTML lists for export. See Exporting Set-type data for more.

System Attributes - Sets vs. Lists

Most group-scope operators have been modified in v5.6.0 so that they can work with lists or sets, as well as the find() operator (whose own output is a list) and literal list-based group designators; exceptions include $KeyAttributes where duplicates would not be helpful. It is the declared data type of the attribute being collected that informs the operator to return a list or set.

Listing of List-type system attributes.


Possible relevant notes (via "Similar Notes" feature):


A Tinderbox Reference File : Objects & Concepts : Attributes: Data Types : List Data Type