如何在Ruby中将1转换为“first”,2到“second”等等?

时间:2010-10-15 09:00:59

标签: ruby

Ruby中是否有内置方法来支持这个?

5 个答案:

答案 0 :(得分:21)

这不完全回答你的问题,但它不能在Ruby中工作,但是如果你在Rails中,你可以将1转换为1st22nd,等等,使用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"

答案 1 :(得分:6)

Linguistics怎么样?它不是内置的。如果你想内置,你必须使用哈希等设置它。 有关示例,请参阅here

答案 2 :(得分:6)

我想要一个具有"第一,第二,第三"的序数化方法。而不是' 1st,2nd,3rd' - 所以这里有一个小片段,最多可以播放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'

答案 3 :(得分:0)

使用人性化宝石,可能是最简单的方法。但是,是的,它没有内置,但它只有一个依赖,所以我认为它是一个不错的选择..

require 'humanize'

2.humanize  => "two"

答案 4 :(得分:0)

如果你不使用 Rails,你可以这样做

def ordinalize(n)
  return "#{n}th" if (11..13).include?(n % 100)

  case n%10
  when 1; "#{n}st"
  when 2; "#{n}nd"
  when 3; "#{n}rd"
  else    "#{n}th"
  end
end

ordinalize 1
=> "1st"
ordinalize 2
=> "2nd"
ordinalize 11
=> "11th"