List Data Type

Tinderbox Icon

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):

Up: Attributes: Data Types
Previous: File Data Type  Next: Number Data Type 

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

Quicklinks: Attributes | Action Codes | Export Codes | Designators | Date Formats | aTbRef Site Map

[Last updated: 16 May 2012, using v5.11.1]


Search:

Google search aTbRef for:  


Creative Commons Licence

aTbRef by Mark Anderson is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.

[See aTbRef CC licence Attribution & Waiver info]

Made with Tinderbox