SortNew (GenericNamedArraylist function): Difference between revisions
mNo edit summary |
m (It's not just a namedarraylist anymore Toto) |
||
Line 1: | Line 1: | ||
{{Template:GenericNamedArraylist:SortNew subtitle}} | {{Template:GenericNamedArraylist:SortNew subtitle}} | ||
<var>SortNew</var> sorts the method object <var>[[FloatNamedArraylist class|FloatNamedArraylist]]</var>, <var>[[NamedArraylist class|NamedArraylist]]</var>, or <var>[[UnicodeNamedArraylist class|UnicodeNamedArraylist]]</var> returning a new object, of the same type as the input object, to hold the sorted result. The sort is based on one or more <var>[[SortOrder_class|sortCriteria]]</var> which consist of a sorting direction (ascending or descending) paired with a sort key (a function that gets applied to each <var class="term">arraylist</var> item). Each sort criterion pair is a <var>[[SortOrder class|SortOrder]]<var> objects, and multiple pairs are a <var>SortOrder</var> collection. | |||
<p>The sort key function that gets applied to each <var>FloatNamedArraylist</var>, <var>NamedArraylist</var>, or <var>UnicodeNamedArraylist</var> item, which you identify in the <var>SortNew</var> parameter, must | |||
The sort is based on one or more | operate on the item type and return a <var class="product">User Language</var> <var>[[Intrinsic classes|intrinsic]]</var> datatype (<var>Float</var>, <var>String</var>, <var>Longstring</var>, or <var>Unicode</var>) value. The values returned by the function are sorted into ascending or descending order to determine the position of their associated item in the result <var>arraylist</var>.</p> | ||
a sorting direction (ascending or descending) paired with a sort key | |||
(a function that gets applied to each | |||
Each sort criterion pair is a [[SortOrder class|SortOrder]] | |||
and multiple pairs are a SortOrder collection. | |||
==Syntax== | ==Syntax== | ||
{{Template:GenericNamedArraylist:SortNew syntax}} | {{Template:GenericNamedArraylist:SortNew syntax}} | ||
===Syntax terms=== | ===Syntax terms=== | ||
<table class="syntaxTable"> | <table class="syntaxTable"> | ||
<tr><th>% | <tr><th>%al</th> | ||
<td> | <td>The newly created <var>FloatNamedArraylist</var>, <var>NamedArraylist</var>, or <var>UnicodeNamedArraylist</var>, that will contain the sorted <var class="term">anyNal</var> items. </td></tr> | ||
<tr><th> | <tr><th>anyNal</th> | ||
<td>The input NamedArraylist object. </td></tr> | <td>The input <var>FloatNamedArraylist</var>, <var>NamedArraylist</var>, or <var>UnicodeNamedArraylist</var> object. </td></tr> | ||
<tr><th> | <tr><th>sortOrder</th> | ||
<td>One or more SortOrder objects, which consist of an ordering direction for the sort and a key to sort by, specified in the form: < | <td>One or more <var>[[SortOrder class|SortOrder]]</var> objects, which consist of an ordering direction for the sort and a key to sort by, specified in the form: <code>order(key)</code>. The order is either <code>Ascending</code> or <code>Descending</code>, and the key is a function that is applied to each item in the <var class="term">anyNal</var> <var>arrayList</var>. For example: <p class="code">%alist = %namray:sortnew(descending(length))</p> | ||
The function is a method value (a method or class member name literal, or a method variable) for a method that operates on objects of the type specified on the <var class="term">anyNal</var> declaration and that returns a numeric or string value. This is described further in [[SortOrder class#Specifying a SortOrder's sort key method|"Specifying a SortOrder's sort key method"]].</td></tr> | |||
</table> | |||
==Usage notes== | ==Usage notes== | ||
<ul> | <ul> | ||
<li>If the function applied by | <li>If the function applied by <var>sortNew</var> returns string values, <var>sortNew</var> uses the decimal-equivalent value of the character bytes to determine the ascending or descending alphabetic order of the associated <var class="term">al</var> items. Lowercase letters are first ranked alphabetically, then upper case letters, also ranked alphabetically, followed by the numbers; ie: <code>'a'..'z','A'..'Z',0..9</code>. | ||
uses the decimal-equivalent value of the character bytes to determine | <li>If two or more <var class="term">al</var> items have equal values after all sort criteria are applied, <var>sortNew</var> returns them in the same order in which they appear in the input <var class="term">anyNal</var>. | ||
the ascending or descending alphabetic order of the associated | <li>The function in the parameter for <var>SortNew</var> is a method value, not a User Language expression. That is, you cannot provide a function that, itself, also has an argument (say, <code>Char(13)</code>) as the <var>SortNew</var> parameter. | ||
<li>As of <var class="product">[[Sirius Mods|"Sirius Mods"]]</var> Version 7.6, the default <var>sortCriteria</var> argument is the <var>SortOrder</var> <code>Ascending(This)</code>, where <code>This</code> is the identity function described further in [[Collections#Using the This function as the Maximum parameter|"Using the This function as the Maximum parameter"]]. Therefore, <code><var class="term">al</var>:sortnew(ascending(this))</code> can be specified simply as <code><var class="term">al</var>:sortnew</code>. See the [[SortNew (Arraylist function)#Examples|SortNew example]]. | |||
<li>SortNew is available in <var class="product">[[Sirius Mods|"Sirius Mods"]]</var> Version 7.3 and later. | |||
the | |||
<li>If two or more | |||
are applied, | |||
input | |||
<li>The function in the parameter for SortNew is a method value, not a User Language expression. | |||
That is, you cannot provide a function that itself has an argument | |||
(say, < | |||
<li>As of | |||
the SortOrder < | |||
where < | |||
in [[Collections#Using the This function as the Maximum parameter|"Using the This function as the Maximum parameter"]]. | |||
Therefore, <code> | |||
specified simply as <code> | |||
See the [[SortNew (Arraylist function)#Examples|SortNew example]]. | |||
</ul> | </ul> | ||
==Examples== | ==Examples== | ||
<ol><li>The following request displays a <var>NamedArraylist</var> in its normal sorted-by-label | |||
The following request displays a <var>NamedArraylist</var> in its normal sorted-by-label | |||
order, then in order of a sort based on a <var>Variable</var> member of the user class. | order, then in order of a sort based on a <var>Variable</var> member of the user class. | ||
<p class="code">begin | |||
<p class="code"> | class python | ||
class python | public | ||
public | variable firstname is string len 16 | ||
variable firstname is string len 16 | variable surname is string len 16 | ||
variable birthdate is float | |||
constructor newpy (%sname is string len 16, - | |||
%name is string len 16, %bd is float) | |||
function myPrint is longstring | |||
end public | |||
end public | |||
constructor newpy (%sname is string len 16, - | constructor newpy (%sname is string len 16, - | ||
%name is string len 16, %bd is float) | |||
%this:firstname = %name | |||
%this:surname = %sname | |||
%this:birthdate = %bd | |||
end constructor | end constructor | ||
function myPrint is longstring | function myPrint is longstring | ||
return %this:firstname with ' ' with - | |||
%this:surname with ' ' with - | |||
'(born: ' with %this:birthdate with ')' | |||
end function | end function | ||
end class | end class | ||
%i is float | %i is float | ||
%lp is Arraylist of object python | %lp is Arraylist of object python | ||
%nlp is namedArraylist of object python | %nlp is namedArraylist of object python | ||
%nlp = new | %nlp = new | ||
%nlp('Gilliam') = newpy('Gilliam', 'Terry', '19401122') | %nlp('Gilliam') = newpy('Gilliam', 'Terry', '19401122') | ||
%nlp('Cleese') = newpy('Cleese', 'John', '19391027') | %nlp('Cleese') = newpy('Cleese', 'John', '19391027') | ||
%nlp('Idle') = newpy('Idle', 'Eric', '19430329') | %nlp('Idle') = newpy('Idle', 'Eric', '19430329') | ||
%nlp('Palin') = newpy('Palin', 'Michael', '19430505') | %nlp('Palin') = newpy('Palin', 'Michael', '19430505') | ||
%nlp('Chapman') = newpy('Chapman', 'Graham', '19410108') | %nlp('Chapman') = newpy('Chapman', 'Graham', '19410108') | ||
%nlp('Jones') = newpy('Jones', 'Terry', '19420201') | %nlp('Jones') = newpy('Jones', 'Terry', '19420201') | ||
for %i from 1 to %nlp:count | for %i from 1 to %nlp:count | ||
print %nlp:itembynumber(%i):myprint | |||
end for | end for | ||
<nowiki> | <nowiki> print '======================================'</nowiki> | ||
</nowiki> | |||
print 'After the sort by birthdate:' | |||
%lp = %nlp:sortnew(ascending(birthdate)) | |||
for %i from 1 to %lp:count | |||
print %lp(%i):myprint | |||
end for | |||
end | end | ||
</p> | </p> | ||
Line 134: | Line 99: | ||
Michael Palin (born: 19430505) | Michael Palin (born: 19430505) | ||
</p> | </p> | ||
<li>For additional sorting examples, see [[Collections#Finding collection maxima and minima, and sorting|"Finding collection maxima and minima, and sorting"]].</ol> | |||
==See also== | ==See also== | ||
{{Template:GenericNamedArraylist:SortNew footer}} | {{Template:GenericNamedArraylist:SortNew footer}} |
Revision as of 05:32, 11 March 2011
Sort items to an Arraylist (FloatNamedArraylist, NamedArraylist, and UnicodeNamedArraylist classes)
SortNew sorts the method object FloatNamedArraylist, NamedArraylist, or UnicodeNamedArraylist returning a new object, of the same type as the input object, to hold the sorted result. The sort is based on one or more sortCriteria which consist of a sorting direction (ascending or descending) paired with a sort key (a function that gets applied to each arraylist item). Each sort criterion pair is a SortOrder objects, and multiple pairs are a SortOrder collection.
The sort key function that gets applied to each FloatNamedArraylist, NamedArraylist, or UnicodeNamedArraylist item, which you identify in the SortNew parameter, must operate on the item type and return a User Language intrinsic datatype (Float, String, Longstring, or Unicode) value. The values returned by the function are sorted into ascending or descending order to determine the position of their associated item in the result arraylist.
Syntax
%al = anyNal:SortNew[( [sortOrder])]
Syntax terms
%al | The newly created FloatNamedArraylist, NamedArraylist, or UnicodeNamedArraylist, that will contain the sorted anyNal items. |
---|---|
anyNal | The input FloatNamedArraylist, NamedArraylist, or UnicodeNamedArraylist object. |
sortOrder | One or more SortOrder objects, which consist of an ordering direction for the sort and a key to sort by, specified in the form: order(key) . The order is either Ascending or Descending , and the key is a function that is applied to each item in the anyNal arrayList. For example: %alist = %namray:sortnew(descending(length)) The function is a method value (a method or class member name literal, or a method variable) for a method that operates on objects of the type specified on the anyNal declaration and that returns a numeric or string value. This is described further in "Specifying a SortOrder's sort key method". |
Usage notes
- If the function applied by sortNew returns string values, sortNew uses the decimal-equivalent value of the character bytes to determine the ascending or descending alphabetic order of the associated al items. Lowercase letters are first ranked alphabetically, then upper case letters, also ranked alphabetically, followed by the numbers; ie:
'a'..'z','A'..'Z',0..9
. - If two or more al items have equal values after all sort criteria are applied, sortNew returns them in the same order in which they appear in the input anyNal.
- The function in the parameter for SortNew is a method value, not a User Language expression. That is, you cannot provide a function that, itself, also has an argument (say,
Char(13)
) as the SortNew parameter. - As of "Sirius Mods" Version 7.6, the default sortCriteria argument is the SortOrder
Ascending(This)
, whereThis
is the identity function described further in "Using the This function as the Maximum parameter". Therefore,al:sortnew(ascending(this))
can be specified simply asal:sortnew
. See the SortNew example. - SortNew is available in "Sirius Mods" Version 7.3 and later.
Examples
- The following request displays a NamedArraylist in its normal sorted-by-label
order, then in order of a sort based on a Variable member of the user class.
begin class python public variable firstname is string len 16 variable surname is string len 16 variable birthdate is float constructor newpy (%sname is string len 16, - %name is string len 16, %bd is float) function myPrint is longstring end public constructor newpy (%sname is string len 16, - %name is string len 16, %bd is float) %this:firstname = %name %this:surname = %sname %this:birthdate = %bd end constructor function myPrint is longstring return %this:firstname with ' ' with - %this:surname with ' ' with - '(born: ' with %this:birthdate with ')' end function end class %i is float %lp is Arraylist of object python %nlp is namedArraylist of object python %nlp = new %nlp('Gilliam') = newpy('Gilliam', 'Terry', '19401122') %nlp('Cleese') = newpy('Cleese', 'John', '19391027') %nlp('Idle') = newpy('Idle', 'Eric', '19430329') %nlp('Palin') = newpy('Palin', 'Michael', '19430505') %nlp('Chapman') = newpy('Chapman', 'Graham', '19410108') %nlp('Jones') = newpy('Jones', 'Terry', '19420201') for %i from 1 to %nlp:count print %nlp:itembynumber(%i):myprint end for print '======================================' print 'After the sort by birthdate:' %lp = %nlp:sortnew(ascending(birthdate)) for %i from 1 to %lp:count print %lp(%i):myprint end for end
The result is:
Graham Chapman (born: 19410108) John Cleese (born: 19391027) Terry Gilliam (born: 19401122) Eric Idle (born: 19430329) Terry Jones (born: 19420201) Michael Palin (born: 19430505) ====================================== After the sort by birthdate: John Cleese (born: 19391027) Terry Gilliam (born: 19401122) Graham Chapman (born: 19410108) Terry Jones (born: 19420201) Eric Idle (born: 19430329) Michael Palin (born: 19430505)
- For additional sorting examples, see "Finding collection maxima and minima, and sorting".