diff --git a/base/sort.jl b/base/sort.jl index 62ffe0c9e8ee1..1535955893756 100644 --- a/base/sort.jl +++ b/base/sort.jl @@ -413,6 +413,13 @@ end sort(v::AbstractVector; kws...) = sort!(copymutable(v); kws...) +## other iterables and fallback ## + +sort(s::String; kws...) = String(sort(collect(s); kws...)) +sort(n::Number) = throw(MethodError(sort, n)) +sort(itr; kws...) = sort(collect(itr); kws...) + + ## selectperm: the permutation to sort the first k elements of an array ## selectperm(v::AbstractVector, k::Union{Integer,OrdinalRange}; kwargs...) = diff --git a/test/sorting.jl b/test/sorting.jl index 2ec0d37095512..5f29b90c9338d 100644 --- a/test/sorting.jl +++ b/test/sorting.jl @@ -348,3 +348,11 @@ end # issue #12833 - type stability of sort @test Base.return_types(sort, (Vector{Int},)) == [Vector{Int}] + +# general iterables +@test sort(take([3,2,1], 2)) == [2,3] +@test sort(drop([1,3,2], 1)) == [2,3] +@test sort("Julia") == "Jailu" +@test sort("Julia", by=isupper) == "uliaJ" +@test sort(graphemes("bca")) == collect(graphemes("abc")) +@test_throws MethodError sort(1)