This version is out of date, covering development from v7.0.0 to v7.5.6. It is maintained here only for inbound reference links from elsewhere. It is no longer actively updated.

Jump to the current version of aTbRef

Tinderbox 7 Icon

collect_if(group,condition,attribute)


Operator Type: 

Operator Scope of Action: 

Operator Purpose: 

Operator First Added: 

Operator Altered: 

 Function   [other Function type actions]

 Conditional Group   [operators of similar scope]

 Set & List creation   [other Set & List creation operators]

 Baseline

 


A function collect_if() builds a List; see collect() for a related new operator.

collect_if(group,condition,attribute)

builds a set by collecting all the notes corresponding to group, testing each note to see if it meets condition, and adding the value of the designated attribute to the set.

From v7.5.5, collect_if() has modified behaviour. If the collected attribute type is multi-value, i.e. Set or a List type, collect() adds its elements to the result. If the collected attribute is not a Set or List type attribute, but contains a semicolon, quotation mark, or parentheses, the value will be added to the result as a quoted string. The change should correct a variety of confusing edge cases.

group may be any group designator, or group defined by find(). In addition, group may be argument that designates a particular (single) note other than 'this'.

condition is a valid conditional test - i.e. it equates to true when matched.

attribute can be any expression, but is typically an attribute.

For example,

collect_if(children,$Status=="Important",$Name) 

will construct a set of the names of all of this note's important children.

Note that collect_if's function is related to agents; many tasks you might perform with collect_if could be done as well, or better, with an agent.

If a list of unique values is required - i.e. a set rather than a list, simply pass the output to a Set attribute. Thus if:

$MyList = collect_if(children,$Age>6,$FavFruit) $MyList is "Apples;Oranges;Pears;Apples"

$MySet = collect(children,$Age>6,$FavFruit) MySet is "Apples;Oranges;Pears;" 

The collect() family of operators has modified its behaviour. If the collected attribute is a set or a list, collect() adds its elements to the result. If the collected attribute is not a set or a list, but contains a semicolon, quotation mark, or parentheses, the value will be added to the result as a quoted string. This should correct a variety of confusing cases.



A Tinderbox Reference File : Actions & Rules : Operators : Full Operator List : collect_if(group,condition,attribute)