Skip to content

SortBy ​

The collection sorted by the value of a function on each element.

✓ checked against that system · ! checked, with disagreements (hover a chip)Wolfram LanguageSortBy!
SortBy(collection, f)sorted by f(element)f(element), ascending; elements with equal keys come out in canonical order. SortBy(c, [f]), with the key function in a list, is stable, keeping input order on ties.
Typed signatures
TypePackageApplies
(collection<T>, any) -> collection<T> where Tcombinatoricsalways

Domain: Collections

Examples

Basic #

Sorted by absolute value

live ↗
InSortBy([−3,1,−2],Abs)\mathrm{SortBy}(\bigl\lbrack-3, 1, -2\bigr\rbrack, \mathrm{Abs})Out[1,−2,−3]\bigl\lbrack1, -2, -3\bigr\rbrack

Pairs sorted by their last element

live ↗
InSortBy([[a,2],[c,1],[d,3]],Last)\mathrm{SortBy}(\bigl\lbrack\bigl\lbrack a, 2\bigr\rbrack, \bigl\lbrack c, 1\bigr\rbrack, \bigl\lbrack d, 3\bigr\rbrack\bigr\rbrack, \mathrm{Last})Out[[c,1],[a,2],[d,3]]\bigl\lbrack\bigl\lbrack c, 1\bigr\rbrack, \bigl\lbrack a, 2\bigr\rbrack, \bigl\lbrack d, 3\bigr\rbrack\bigr\rbrack

Equal sort keys now follow Wolfram's tie order (our own convention changing, not a known value).

live ↗
InSortBy([[1,2,3],[2,3,1],[3,1,2],[2,2]],Last)\mathrm{SortBy}(\bigl\lbrack\bigl\lbrack1, 2, 3\bigr\rbrack, \bigl\lbrack2, 3, 1\bigr\rbrack, \bigl\lbrack3, 1, 2\bigr\rbrack, \bigl\lbrack2, 2\bigr\rbrack\bigr\rbrack, \mathrm{Last})Out[[2,3,1],[2,2],[3,1,2],[1,2,3]]\bigl\lbrack\bigl\lbrack2, 3, 1\bigr\rbrack, \bigl\lbrack2, 2\bigr\rbrack, \bigl\lbrack3, 1, 2\bigr\rbrack, \bigl\lbrack1, 2, 3\bigr\rbrack\bigr\rbrack
live ↗
InSortBy([[1,2,3],[2,3,1],[3,1,2],[2,2]],Total)\mathrm{SortBy}(\bigl\lbrack\bigl\lbrack1, 2, 3\bigr\rbrack, \bigl\lbrack2, 3, 1\bigr\rbrack, \bigl\lbrack3, 1, 2\bigr\rbrack, \bigl\lbrack2, 2\bigr\rbrack\bigr\rbrack, \mathrm{Total})Out[[2,2],[1,2,3],[2,3,1],[3,1,2]]\bigl\lbrack\bigl\lbrack2, 2\bigr\rbrack, \bigl\lbrack1, 2, 3\bigr\rbrack, \bigl\lbrack2, 3, 1\bigr\rbrack, \bigl\lbrack3, 1, 2\bigr\rbrack\bigr\rbrack

Sorts by residue mod 33; ties come out in canonical order

live ↗
InSortBy(1..10,_1⁡↦_1⁡ mod 3)\mathrm{SortBy}(1..10, \operatorname{\_1}↦\operatorname{\_1}\bmod3)Out[3,6,9,1,4,7,10,2,5,8]\bigl\lbrack3, 6, 9, 1, 4, 7, 10, 2, 5, 8\bigr\rbrack
Scope #

Sorted by the square of each element

live ↗
InSortBy([4,−5,1,3,−2],_1⁡↦_1⁡2)\mathrm{SortBy}(\bigl\lbrack4, -5, 1, 3, -2\bigr\rbrack, \operatorname{\_1}↦\operatorname{\_1}^2)Out[1,−2,3,4,−5]\bigl\lbrack1, -2, 3, 4, -5\bigr\rbrack

Sorting by −x-x gives descending order

live ↗
InSortBy([3,1,2],Negate)\mathrm{SortBy}(\bigl\lbrack3, 1, 2\bigr\rbrack, \mathrm{Negate})Out[3,2,1]\bigl\lbrack3, 2, 1\bigr\rbrack

Sorted by key length

live ↗
InSortBy([dog,zebra,donkey,anteater,fish],StringLength)\mathrm{SortBy}(\bigl\lbrack\text{dog}, \text{zebra}, \text{donkey}, \text{anteater}, \text{fish}\bigr\rbrack, \mathrm{StringLength})Out[dog,fish,zebra,donkey,anteater]\bigl\lbrack\text{dog}, \text{fish}, \text{zebra}, \text{donkey}, \text{anteater}\bigr\rbrack
live ↗
InSortBy([1+e−10i,e2+i,e−1+2i,ei],Abs)\mathrm{SortBy}(\bigl\lbrack\sqrt{1+e^{-10i}}, e^{2+i}, e^{-1+2i}, e^{i}\bigr\rbrack, \mathrm{Abs})Out[e−1+2i,1+isin⁡(−10)+cos⁡(−10),isin⁡(1)+cos⁡(1),e2+i]\bigl\lbrack e^{-1+2i}, \sqrt{1+i\sin(-10)+\cos(-10)}, i\sin(1)+\cos(1), e^{2+i}\bigr\rbrack
live ↗
InSortBy([e,π,sin⁡(1),2],N)\mathrm{SortBy}(\bigl\lbrack e, π, \sin(1), \sqrt{2}\bigr\rbrack, N)Out[sin⁡(1),2,e,π]\bigl\lbrack\sin(1), \sqrt{2}, e, π\bigr\rbrack
live ↗
InSortBy([1,1+1/e10,e2+i,e−1+2i,ei],_1⁡↦N(∣_1⁡∣))\mathrm{SortBy}(\bigl\lbrack1, \sqrt{1+1/e^{10}}, e^{2+i}, e^{-1+2i}, e^{i}\bigr\rbrack, \operatorname{\_1}↦N(\vert\operatorname{\_1}\vert))Out[e−1+2i,1,isin⁡(1)+cos⁡(1),1+1/e10,e2+i]\bigl\lbrack e^{-1+2i}, 1, i\sin(1)+\cos(1), \sqrt{1+1/e^{10}}, e^{2+i}\bigr\rbrack

Elements with equal keys come out in canonical order, so SortBy is not stable

live ↗
InSortBy([bb,a,cc,aa,b],StringLength)\mathrm{SortBy}(\bigl\lbrack\text{bb}, \text{a}, \text{cc}, \text{aa}, \text{b}\bigr\rbrack, \mathrm{StringLength})Out[a,b,aa,bb,cc]\bigl\lbrack\text{a}, \text{b}, \text{aa}, \text{bb}, \text{cc}\bigr\rbrack

A list of key functions sorts by each in turn and keeps input order for what ties on all of them

live ↗
InSortBy([bb,a,cc,aa,b],[StringLength])\mathrm{SortBy}(\bigl\lbrack\text{bb}, \text{a}, \text{cc}, \text{aa}, \text{b}\bigr\rbrack, \bigl\lbrack\mathrm{StringLength}\bigr\rbrack)Out[a,b,bb,cc,aa]\bigl\lbrack\text{a}, \text{b}, \text{bb}, \text{cc}, \text{aa}\bigr\rbrack
live ↗
InSortBy([3,1,2,−1,−3],Abs)\mathrm{SortBy}(\bigl\lbrack3, 1, 2, -1, -3\bigr\rbrack, \mathrm{Abs})Out[−1,1,2,−3,3]\bigl\lbrack-1, 1, 2, -3, 3\bigr\rbrack
live ↗
InSortBy([3,1,2,−1,−3],[Abs])\mathrm{SortBy}(\bigl\lbrack3, 1, 2, -1, -3\bigr\rbrack, \bigl\lbrack\mathrm{Abs}\bigr\rbrack)Out[1,−1,2,3,−3]\bigl\lbrack1, -1, 2, 3, -3\bigr\rbrack
Applications #
live ↗
InSortBy(exprs,err)\mathrm{SortBy}(\mathrm{exprs}, \mathrm{err})OutSortBy(exprs,err)\mathrm{SortBy}(\mathrm{exprs}, \mathrm{err})
Properties #
live ↗
InSortBy(list,Abs)\mathrm{SortBy}(\mathrm{list}, \mathrm{Abs})OutSortBy(list,Abs)\mathrm{SortBy}(\mathrm{list}, \mathrm{Abs})
live ↗
InSortBy(list,First)\mathrm{SortBy}(\mathrm{list}, \mathrm{First})OutSortBy(list,First)\mathrm{SortBy}(\mathrm{list}, \mathrm{First})
About
Examples18
Checked againstWolfram Language 17 agree1 differ
CrosswalkWolfram Language

See also: Sort, GatherBy