3

私のアプリのユーザーにはポイントがあります。ポイントに基づいて、異なるランクを割り当てたいと思います。これは私のランク マッピング ハッシュです。

RANKS = { (1..20)     => 'Private'
          (21..40)    => 'Corporal'
          (41..60)    => 'Sergeant'
          (61..80)    => 'Lieutenant'
          (81..100)   => 'Captain'
          (101..150)  => 'Major'
          (151..200)  => 'Colonel'
          201         => 'General'
        }

ユーザーのポイントがハッシュの範囲キーにあるかどうかを確認し、必要な値を抽出する必要があります。これに対するエレガントな解決策はありますか?「ケース」演算子を使用できますが、それは私が望むほどエレガントではありません。

4

1 に答える 1

3

すべてのキーと値のペアを繰り返して確認するだけです。

RANKS = { (1..20)     => 'Private',
          (21..40)    => 'Corporal',
          (41..60)    => 'Sergeant',
          (61..80)    => 'Lieutenant',
          (81..100)   => 'Captain',
          (101..150)  => 'Major',
          (151..200)  => 'Colonel',
          (201..+1.0/0.0)         => 'General', # from 201 to infinity
        }


def get_rank score
  RANKS.each do |k, v|
    return v if k.include?(score)
  end

  nil
end

get_rank 1 # => "Private"
get_rank 50 # => "Sergeant"
get_rank 500 # => "General"
get_rank -1 # => nil

アップデート:

caseなぜあなたがエレガントではないと思うのか分かりません。かなりエレガントだと思います。

def get_rank score
  case score
  when (1..10) then 'Private'
  when (21..40) then 'Corporal'
  when (41..1.0/0.0) then 'Sergeant or higher'
  else nil
  end
end

get_rank 1 # => "Private"
get_rank 50 # => "Sergeant or higher"
get_rank 500 # => "Sergeant or higher"
get_rank -1 # => nil
于 2013-04-05T09:45:48.533 に答える