Как конвертировать 1 в "первый", от 2 до "второй" и т.д., В Ruby?
Есть ли встроенный метод в Ruby для поддержки этого?
Ответы
Ответ 1
если вы находитесь в Rails, вы можете конвертировать 1
в 1st
, 2
в 2nd
и т.д., используя ordinalize
.
Пример:
1.ordinalize # => "1st"
2.ordinalize # => "2nd"
3.ordinalize # => "3rd"
...
9.ordinalize # => "9th"
...
1000.ordinalize # => "1000th"
А если вам нужны запятые в большом количестве:
number_with_delimiter(1000, :delimiter => ',') + 1000.ordinal # => "1,000th"
в ruby у вас нет этого метода, но вы можете добавить свой собственный в классе Integer следующим образом.
class Integer
def ordinalize
case self%10
when 1
return "#{self}st"
when 2
return "#{self}nd"
when 3
return "#{self}rd"
else
return "#{self}th"
end
end
end
22.ordinalize #=> "22nd"
Ответ 2
Как насчет Linguistics? Однако он не построен. Если вы хотите встроить, вам нужно настроить его с помощью хэшей и т.д.
См. здесь также для примеров
Ответ 3
Мне нужен метод ординализации, который имеет "первый, второй, третий", а не "1-й, 2-й, 3-й", поэтому здесь небольшой фрагмент, который работает до 10 (и возвращается к Rails, упорядочивая, если он не может найти его).
class TextOrdinalize
def initialize(value)
@value = value
end
def text_ordinalize
ordinalize_mapping[@value] || @value.ordinalize
end
private
def ordinalize_mapping
[nil, "first", "second", "third", "fourth", "fifth", "sixth", "seventh",
"eighth", "ninth", "tenth" ]
end
end
Вот как это работает:
TextOrdinalize.new(1).text_ordinalize #=> 'first'
TextOrdinalize.new(2).text_ordinalize #=> 'second'
TextOrdinalize.new(0).text_ordinalize #=> '0st'
TextOrdinalize.new(100).text_ordinalize #=> '100th'
Ответ 4
Использование гуманизированного драгоценного камня, возможно, самый простой способ. Но, да, он не встроен, однако он имеет только одну зависимость, поэтому я думаю, что это довольно хороший выбор.
require 'humanize'
2.humanize => "two"