Ruby – Ranges
範囲は1月から12月、0から9、など決められた範囲を表します。
- シーケンスとしての範囲
- 条件としての範囲
- インターバルとしての範囲
シーケンスとしての範囲
範囲の最初の、おそらく最も自然な使用は、シーケンスを表現することです。シーケンスには開始点、終了点、およびシーケンス内の連続する値を生成する方法があります。
Rubyは、‘..’ ‘と‘ ‘…’ ‘の範囲演算子を使ってこれらのシーケンスを作成します。2ドット形式はインクルーシブ範囲を作成し、3ドット形式は指定された高い値を除外する範囲を作成します。
(1..5) #==> 1, 2, 3, 4, 5 (1...5) #==> 1, 2, 3, 4 ('a'..'d') #==> 'a', 'b', 'c', 'd'
シーケンス1..100は、2つのFixnumオブジェクトへの参照を含むRange オブジェクトとして保持されます。必要な場合は、to_aメソッドを使用して範囲をリストに変換することができます。次の例を試してみてください。
#!/usr/bin/ruby $, =", " # Array value separator range1 = (1..10).to_a range2 = ('bar'..'bat').to_a puts "#{range1}" puts "#{range2}"
これにより、次の結果が生成されます。
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] ["bar", "bas", "bat"]
範囲を反復し、さまざまな方法でコンテンツをテストできるメソッドを実装しています。
#!/usr/bin/ruby # Assume a range digits = 0..9 puts digits.include?(5) ret = digits.min puts "Min value is #{ret}" ret = digits.max puts "Max value is #{ret}" ret = digits.reject {|i| i < 5 } puts "Rejected values are #{ret}" digits.each do |digit| puts "In Loop #{digit}" end
これにより、次の結果が生成されます。
true Min value is 0 Max value is 9 Rejected values are 5, 6, 7, 8, 9 In Loop 0 In Loop 1 In Loop 2 In Loop 3 In Loop 4 In Loop 5 In Loop 6 In Loop 7 In Loop 8 In Loop 9
条件としての範囲
範囲は条件式としても使用できます。例えば、各セットの最初の行は、ワード含む標準入力からの行の次のコード断片プリントセット開始およびワードが最後の行終了を –
while gets print if /start/../end/ end
ケースステートメントで範囲を使用できます –
#!/usr/bin/ruby score = 70 result = case score when 0..40 then "Fail" when 41..60 then "Pass" when 61..70 then "Pass with Merit" when 71..100 then "Pass with Distinction" else "Invalid Score" end puts result
これにより、次の結果が生成されます。
Pass with Merit
インターバルとしての範囲
汎用的な範囲の最終的な使用は、間隔テストとしてです:がある値が範囲によって表される間隔内にあるかどうかを確認してください。これは、ケース等価演算子===を使用して行われます。
#!/usr/bin/ruby if ((1..10) === 5) puts "5 lies in (1..10)" end if (('a'..'j') === 'c') puts "c lies in ('a'..'j')" end if (('a'..'j') === 'z') puts "z lies in ('a'..'j')" end
これにより、次の結果が生成されます。
5 lies in (1..10) c lies in ('a'..'j')
前のページ
次のページ