Как преобразовать 1 в «первый», 2 во «второй» и т. Д. В Ruby? - PullRequest
20 голосов
/ 15 октября 2010

Есть ли в Ruby встроенный метод для поддержки этого?

Ответы [ 4 ]

21 голосов
/ 08 января 2015

Это не дает точного ответа на ваш вопрос и не будет работать в Ruby, но если вы находитесь в 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"
6 голосов
/ 12 августа 2016

Мне нужен метод ординализации, который имеет «первый, второй, третий», а не «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'
6 голосов
/ 15 октября 2010

Как насчет Лингвистика ? Это не встроенный, хотя. Если вы хотите встроить, вы должны настроить его с помощью хэшей и т.д .. См. здесь также для примеров

0 голосов
/ 12 августа 2016

Использование гуманизированного драгоценного камня, вероятно, самый простой способ. Но, да, он не встроен, однако имеет только одну зависимость, поэтому я думаю, что это довольно хороший выбор ..

require 'humanize'

2.humanize  => "two"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...