Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2012

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: SortBy for multiple key sorts

  • To: mathgroup at smc.vnet.net
  • Subject: [mg124042] Re: SortBy for multiple key sorts
  • From: Bob Hanlon <hanlonr357 at gmail.com>
  • Date: Sat, 7 Jan 2012 05:17:02 -0500 (EST)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com
  • References: <201201060916.EAA26845@smc.vnet.net>

pts = {{0, 2}, {1, 2}, {2, 2}, {4, 1}, {3, 1}, {6, 1}, {5, 1}, {7, 0}, {-1,
    0}};

sortByYthenX = SortBy[pts, {Min[#[[2]]] &, Min[#[[1]]] &}]

{{-1, 0}, {7, 0}, {3, 1}, {4, 1}, {5, 1}, {6, 1}, {0, 2}, {1, 2}, {2, 2}}

The Min isn't doing anything useful

sortByYthenX ==
 SortBy[pts, {#[[2]], #[[1]]} &] ==
 SortBy[pts, {Last, First}] ==
 Reverse /@ Sort[Reverse /@ pts]

True


Bob Hanlon


On Fri, Jan 6, 2012 at 4:16 AM, Chris Young <cy56 at comcast.net> wrote:
> Finally figured out a reasonably simple way to sort by two keys, in
> this case by the y-coordinates, and then within that sorting, by
> x-coordinates. This is just a standard way to sort points: from bottom
> to top in rows, and within each row from left to right. Why on earth
> can't Sort take a list of ordering functions so that the same thing can
> be done there?
>
> In[1200]:= pts =
>  {
>  {0, 2}, {1, 2}, {2, 2},
>  {4, 1}, {3, 1}, {6, 1}, {5, 1},
>  {7, 0}, {-1, 0}
>  }
>
> In[1206]:= sortByYthenX = SortBy[pts, {Min[#[[2]]] &, Min[#[[1]]] &}]
>
> Out[1206]= {{-1, 0}, {7, 0}, {3, 1}, {4, 1}, {5, 1}, {6, 1}, {0,
>  2}, {1, 2}, {2, 2}}
>



  • Prev by Date: Column widths in Grid
  • Next by Date: Re: SortBy won't order irrationals
  • Previous by thread: SortBy for multiple key sorts
  • Next by thread: Re: SortBy for multiple key sorts