Sort (Arraylist subroutine): Difference between revisions

From m204wiki
Jump to navigation Jump to search
mNo edit summary
Line 1: Line 1:
{{Template:Arraylist:Sort subtitle}}
{{Template:Arraylist:Sort subtitle}}
 
This subroutine sorts the method object <var>Arraylist</var> and replaces it with the sorted result. The sort is based on one or more <var>[[SortOrder_class|sort criteria]]</var> which consist of a sorting direction (ascending or descending) paired with a sort key (a function that gets applied to each <var>Arraylist</var> item).  Each sort criterion pair is a <var>[[SortOrder class#SortOrder object variable declaration syntax|SortOrder object]]</var>, and multiple pairs are a <var>SortOrder</var> collection.
This subroutine sorts the method object <var>Arraylist</var> and replaces it with the sorted result. The sort is based on one or more <var>[[SortOrder_class|sort criteria]]</var> which consist of a sorting direction (ascending or descending) paired with a sort key (a function that gets applied to each <var>Arraylist</var> item).  Each sort criterion pair is a <var>[[SortOrder class#SortOrder object variable declaration syntax|SortOrder object]]</var>, and multiple pairs are a <var>SortOrder</var> collection.
<p>The sort key function that gets applied to each <var>Arraylist</var> item, which you identify in the <var>Sort</var> parameter, must operate on the item type and return a User Language intrinsic 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 <var>Arraylist</var>.</p>
<p>The sort key function that gets applied to each <var>Arraylist</var> item, which you identify in the <var>Sort</var> parameter, must operate on the item type and return a User Language intrinsic 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 <var>Arraylist</var>.</p>
<p>The system intrinsic classes are discussed in "[[Intrinsic classes]]".</p>
<p>The system intrinsic classes are discussed in [[Intrinsic classes|"Intrinsic classes"]].</p>
 
==Syntax==
==Syntax==
{{Template:Arraylist:Sort syntax}}
{{Template:Arraylist:Sort syntax}}
Line 14: Line 14:
<td>One or more <var>[[SortOrder class#SortOrder object variable declaration syntax|SortOrder]]</var> objects, which consist of an ordering direction for the sort and an attribute, or key, to sort by. The ordering direction and sort key are specified in the form: <var class="term">order(key)</var>. The order is either <var>Ascending</var> or <var>Descending</var>, and the key is a function that is applied to each item in the <var class="term">al</var>. The values returned by the function are sorted into ascending or descending order to determine the position of their associated item in the rearranged <var class="term">al</var>. For example:
<td>One or more <var>[[SortOrder class#SortOrder object variable declaration syntax|SortOrder]]</var> objects, which consist of an ordering direction for the sort and an attribute, or key, to sort by. The ordering direction and sort key are specified in the form: <var class="term">order(key)</var>. The order is either <var>Ascending</var> or <var>Descending</var>, and the key is a function that is applied to each item in the <var class="term">al</var>. The values returned by the function are sorted into ascending or descending order to determine the position of their associated item in the rearranged <var class="term">al</var>. For example:
<p class="code"><var class="term">al</var>:sortnew(descending(length))</p>
<p class="code"><var class="term">al</var>:sortnew(descending(length))</p>
<p>The function is a method value (a method or class member name literal, or a method variable) for a method that operates on items of the type specified on the <var class="term">al</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]]".</p></td></tr>
<p>The function is a method value (a method or class member name literal, or a method variable) for a method that operates on items of the type specified on the <var class="term">al</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"]].</p></td></tr>
</table>
</table>
 
==Usage notes==
==Usage notes==
<ul>
<ul>
Line 22: Line 22:
<li>If two or more <var class="term">al</var> items have equal values after all sort criteria are applied, <var>Sort</var> places them in the same order in which they appear in the input <var class="term">al</var>.
<li>If two or more <var class="term">al</var> items have equal values after all sort criteria are applied, <var>Sort</var> places them in the same order in which they appear in the input <var class="term">al</var>.
<li>The function in the parameter for <var>Sort</var> is a method value, not a User Language expression.  That is, you cannot provide a function that itself has an argument (say, <code><var>[[ToIntegerPower and ToPower (Float functions)|ToIntegerPower]]</var>(2)</code>) as the <var>Sort</var> parameter.
<li>The function in the parameter for <var>Sort</var> is a method value, not a User Language expression.  That is, you cannot provide a function that itself has an argument (say, <code><var>[[ToIntegerPower and ToPower (Float functions)|ToIntegerPower]]</var>(2)</code>) as the <var>Sort</var> parameter.
<li>As of <var class="product">Sirius Mods</var> version 7.6, the default <var class="term">sortOrder</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>:sort(ascending(this))</code> can be specified simply as <code><var class="term">al</var>:sort</code>.  See "[[SortNew (Arraylist function)#Examples|SortNew example]]".
<li>As of <var class="product">Sirius Mods</var> version 7.6, the default <var class="term">sortOrder</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>:sort(ascending(this))</code> can be specified simply as <code><var class="term">al</var>:sort</code>.  See [[SortNew (Arraylist function)#Examples|"SortNew example"]].
 
<li><var>Sort</var> is available in <var class="product">Sirius Mods</var> version 7.3 and later.
<li><var>Sort</var> is available in <var class="product">Sirius Mods</var> version 7.3 and later.
</ul>
</ul>
 
==Examples==
==Examples==
<ol><li>For examples of the <var>Sort</var> method, see [[Collections#Finding collection maxima and minima, and sorting|Finding collection maxima and minima, and sorting]].</ol>
For examples of the <var>Sort</var> method, see [[Collections#Finding collection maxima and minima, and sorting|Finding collection maxima and minima, and sorting]].
 
==See also==
==See also==
<ul><li><var>[[SortNew (Arraylist function)|SortNew]]</var> is a function that works like <var>Sort</var> but returns a new <var>Arraylist</var> instead of replacing the method object.</ul>
<ul><li><var>[[SortNew (Arraylist function)|SortNew]]</var> is a function that works like <var>Sort</var> but returns a new <var>Arraylist</var> instead of replacing the method object.</ul>
{{Template:Arraylist:Sort footer}}
{{Template:Arraylist:Sort footer}}

Revision as of 22:04, 2 March 2011

Sort the input Arraylist (Arraylist class)


This subroutine sorts the method object Arraylist and replaces it with the sorted result. The sort is based on one or more sort criteria 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 object, and multiple pairs are a SortOrder collection.

The sort key function that gets applied to each Arraylist item, which you identify in the Sort 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 Arraylist.

The system intrinsic classes are discussed in "Intrinsic classes".

Syntax

al:Sort[( [sortOrder])]

Syntax terms

al The input Arraylist object.
sortOrder One or more SortOrder objects, which consist of an ordering direction for the sort and an attribute, or key, to sort by. The ordering direction and sort key are 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 al. The values returned by the function are sorted into ascending or descending order to determine the position of their associated item in the rearranged al. For example:

al: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 items of the type specified on the al 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 Sort returns string values, Sort 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, Sort places them in the same order in which they appear in the input al.
  • The function in the parameter for Sort is a method value, not a User Language expression. That is, you cannot provide a function that itself has an argument (say, ToIntegerPower(2)) as the Sort parameter.
  • As of Sirius Mods version 7.6, the default sortOrder argument is the sortOrder Ascending(This), where This is the identity function described further in "Using the This function as the Maximum parameter". Therefore, al:sort(ascending(this)) can be specified simply as al:sort. See "SortNew example".
  • Sort is available in Sirius Mods version 7.3 and later.

Examples

For examples of the Sort method, see Finding collection maxima and minima, and sorting.

See also

  • SortNew is a function that works like Sort but returns a new Arraylist instead of replacing the method object.