# Sort by more than one element?

**URL:** https://discourse.julialang.org/t/sort-by-more-than-one-element/3026
**Category:** General Usage
**Tags:** question, sort, arrays
**Created:** [April 3, 2017, 4:48pm UTC](https://discourse.julialang.org/t/sort-by-more-than-one-element/3026 "2017-04-03T16:48:26Z")
**Posts on this page:** 6
**Page:** 1

<div class="post-metadata">

### Author: ![cormullion](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/cormullion/32/49131_2.png) [@cormullion](https://discourse.julialang.org/u/cormullion)
#### Post date: [April 3, 2017, 4:48pm UTC](https://discourse.julialang.org/t/sort-by-more-than-one-element/3026/1 "2017-04-03T16:48:26Z")

</div>

Is it possible to sort an array by more than one column?

```julia
julia> x
4-element Array{Array{Int64,1},1}:
 [1,1,1,5,1]
 [2,1,3,2,1]
 [3,1,1,1,5]
 [1,3,2,4,1]

julia> sort(x, by = x -> x[1]) # sort by first element, yes
4-element Array{Array{Int64,1},1}:
 [1,1,1,5,1]
 [1,3,2,4,1]
 [2,1,3,2,1]
 [3,1,1,1,5]

```

Now I’m looking for a way to sort by element 1, then, say, by element 4:

```julia
 [1,3,2,4,1]
 [1,1,1,5,1]
 [2,1,3,2,1]
 [3,1,1,1,5]

```

`sortrows()` looks promising, but won’t do it here. Is this a job for DataTables?

---

<div class="post-metadata">

### Author: ![yuyichao](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/yuyichao/32/20_2.png) [@yuyichao](https://discourse.julialang.org/u/yuyichao)
#### Post date: [April 3, 2017, 5:11pm UTC](https://discourse.julialang.org/t/sort-by-more-than-one-element/3026/2 "2017-04-03T17:11:10Z")

</div>

Specify `lt`?

---

<div class="post-metadata">

### Author: ![pfitzseb](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/pfitzseb/32/45566_2.png) [@pfitzseb](https://discourse.julialang.org/u/pfitzseb)
#### Post date: [April 3, 2017, 5:12pm UTC](https://discourse.julialang.org/t/sort-by-more-than-one-element/3026/3 "2017-04-03T17:12:47Z")

</div>

```julia
A = [[1,1,1,5,1],
     [2,1,3,2,1],
     [3,1,1,1,5],
     [1,3,2,4,1]]

custom_lt(x, y) = x[1] == y[1] ? x[4] < y[4] : x[1] < y[1]

sort(A, lt=custom_lt)

```

---

<div class="post-metadata">

### Author: ![cormullion](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/cormullion/32/49131_2.png) [@cormullion](https://discourse.julialang.org/u/cormullion)
#### Post date: [April 3, 2017, 8:37pm UTC](https://discourse.julialang.org/t/sort-by-more-than-one-element/3026/4 "2017-04-03T20:37:22Z")

</div>

@yuyichao @pfitzseb Of course! Thanks! For some reason I didn’t think of that…

---

<div class="post-metadata">

### Author: ![jmkuhn](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jmkuhn/32/2090_2.png) [@jmkuhn](https://discourse.julialang.org/u/jmkuhn)
#### Post date: [April 3, 2017, 10:55pm UTC](https://discourse.julialang.org/t/sort-by-more-than-one-element/3026/5 "2017-04-03T22:55:28Z")

</div>

Create a tuple that sorts as desired.

`sort(x, by=x->(x[1],x[4]))`

---

<div class="post-metadata">

### Author: ![cormullion](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/cormullion/32/49131_2.png) [@cormullion](https://discourse.julialang.org/u/cormullion)
#### Post date: [April 4, 2017, 7:47am UTC](https://discourse.julialang.org/t/sort-by-more-than-one-element/3026/6 "2017-04-04T07:47:18Z")

</div>

Even better! Thanks.
