Operator Type:
Operator Scope of Action:
Operator Purpose:
Data Type Returned:
Operator First Added:
Operator in Current Baseline:
Operator Last Altered:
Operator Has Optional Arguments:
Function [other Function type actions]
Item [operators of similar scope]
Data manipulation [other Data manipulation operators]
List [about List data type]
v5.0.0
Baseline
As at baseline
Syntax note: Operators without any defined mandatory arguments may omit their empty closing parentheses
List.isort([attributeRef])
List.isort()
For List-type list data, the basic form
$MyList = $MyList.isort();
re-sorts the referenced list's values in lexical, case-insensitive order. This means sorting letters in alphabetical order "a,b,c'" with all upper case instances sorting after any lower case ones as in "ant;Ant;bee;Bee;cow;Cow". Lexical sort of numbers means '1,11,2' not 1,2,11' as might be expected.
Alternative sorts are a lexical case-sensitive List.sort(), and a numeric List.nsort() (the latter giving '1,2,11' not '1,11,2'). Or, if using $Name or $Path data, use the optional long from (below) and let the nominated attribute's data type set the form of sort, e.g. for date sorting, sort on a Date-type attribute.
The resulting sort order can be reversed overall by chaining the List.isort() and List.reverse() functions:
$MyList = $MyList.isort().reverse();
List.sort(attributeRef)
Here the referenced List must be a list of note names or paths, i.e. a list of $Name data or $Path data (but not a mix of the two). If note names are not unique within the document, path values must be used to achieve correct sort. This is because the stipulated
The attributeRef argument is a $-prefixed attribute reference and indicates the attribute supplying the sorted value in each list item. As a result, this form of sort cannot be used with any other date type of list and cannot be applied to a literal list of values (as they have no attributes!), unlike the short un-argumented form above.
Thus, the sort order is based on the value of the stipulated attributeRef and that value is derived from the $Name or $Path of the list item being evaluated: $MyList = $collect(children, $Name).isort($StartDate);
$MyList = $collect_if(find($Prototype=="pArticle"), $Fruit!="",$Path).isort($Fruit);
So, in the latter case, $MyList is a list of paths, but the paths are sorted in the order of each item's $Year value rather than the default $OutlineOrder of the source objects. Consider notes 'A', 'B', and 'C' in that existing on that $OutlineOrder. Without the sort, $MyList created above is the paths [/A;/B;/C]. If the notes' respective $Fruit values are "Apple","apple","Pear", then a $Year-based sort make the $MyList to be [/C;/A;/B] —whereas a normal .sort($Fruit) would result in [/A;/C;/B].
In this argument-based usage, the sort ordering is based on the data type of AttributeRef:
- Number-type: and Interval-type: numerical sort
- Date-type: sort on date (implied numerical)
- All other types lexical
But if attributeRef is Number-type, List.nsort() could be used instead.
With .isort() lexical sorts are always case-insensitive.
Legacy: Use of sorting with Set-type data
This operator does not apply to Set-type lists because, as from v9.0.0, Sets now auto-sort A–Z and cannot be (reliably) user-sorted to a different order. However, is passing the result to a List-type or to some other process—i.e. passing the sorted result, not the source Set—then sorted content is possible.
See also—notes linking to here: