NaturalSort is a simple library which implements a natural, human-friendly alphanumeric sort in Ruby.
%w[a1 a11 a12 a2 a21].natural_sort #=> %w[a1 a2 a11 a12 a21]
%w[a b c A B C].natural_sort #=> %w[A a B b C c]
%w[x__2 x_1].natural_sort #=> %w[x_1 x__2]
%w[x2-y08 x2-g8 x2-y7 x8-y8].natural_sort #=> %w[x2-g8 x2-y7 x2-y08 x8-y8]
%w[x02-y08 x02-g8 x2-y7 x8-y8].natural_sort #=> %w[x02-g8 x2-y7 x02-y08 x8-y8]
In your Gemfile
:
gem 'naturalsort'
or to optionally extend Ruby native objects:
gem 'naturalsort', require: 'natural_sort_kernel'
$ gem install naturalsort
require 'natural_sort_kernel'
adds natural_sort
methods to all native Ruby enumerable objects (Array, Hash, etc...)
require 'natural_sort_kernel'
%w[a b c A B C].natural_sort
require 'natural_sort' # unless using Bundler
NaturalSort.sort %w[a b c d A B C D]
Adds natural_sort
methods to Ruby native enumerable objects (Array, Hash, etc...)
person_1 = Person.new('Moe')
person_2 = Person.new('Larry')
person_3 = Person.new('Curly')
[person_1, person_2, person_3].sort{|a,b| NaturalSort.comparator(a.name, b.name)} #=> [person_3, person_2, person_1]
%w[a b c A B C].natural_sort
Can be used to add #natural_sort
method to on any enumerable object or any object which implements #to_a
class TodoList < Array
include NaturalSort
end
todo_list = TodoList.new
todo_list << 'Wash car'
todo_list << 'Water plants'
todo_list << 'Feed dog'
todo_list.natural_sort #=> ['Feed dog', 'Wash car', 'Water plants']
Fork -> Patch -> Spec -> Push -> Pull Request
Links related to the natural sorting problem:
Copyright (c) 2007 Benjamin Francisoud
Licensed under the MIT License. Refer to LICENSE for details.