Ruby 範囲(Range)
範囲(Range)はどこにでもあります:a から z、0 から 9、など。Ruby は範囲をサポートし、さまざまな方法で範囲を使用できます:
- シーケンスとしての範囲
- 条件としての範囲
- 間隔としての範囲
シーケンスとしての範囲
範囲の最初で最も一般的な用途は、シーケンスを表現することです。シーケンスには、開始点、終了点、そしてシーケンスで連続する値を生成する方法があります。
Ruby は''..''と''...''範囲演算子を使用してこれらのシーケンスを作成します。2つのドット形式は指定された最大値を含む範囲を作成し、3つのドット形式は指定された最大値を含まない範囲を作成します。
(1..5) #==> 1, 2, 3, 4, 5
(1...5) #==> 1, 2, 3, 4
('a'..'d') #==> 'a', 'b', 'c', 'd'
シーケンス 1..100 はRangeオブジェクトであり、2つのFixnumオブジェクトの参照を含みます。必要に応じて、to_aメソッドを使用して範囲をリストに変換できます。次の例を試してください:
サンプル
#!/usr/bin/ruby
$, =", " #Array 値の区切り文字
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
# -*- coding: UTF-8 -*-
#指定範囲
digits = 0..9
puts digits.include?(5)
ret = digits.min
puts "最小値は #{ret}"
ret = digits.max
puts "最大値は #{ret}"
ret = digits.reject {|i| i < 5 }
puts "条件に一致しないもの: #{ret}"
digits.each do |digit|
puts "ループ内: #{digit}"
end
試してみる »
上記の例の実行出力結果は次のとおりです:
true 最小值为 0 最大值为 9 不符合条件的有 [5, 6, 7, 8, 9] 在循环中 0 在循环中 1 在循环中 2 在循环中 3 在循环中 4 在循环中 5 在循环中 6 在循环中 7 在循环中 8 在循环中 9
条件としての範囲
範囲は条件式としても使用できます。たとえば、次のコードスニペットは標準入力から行を出力します。各セットの最初の行には単語start、最後の行には単語end.:
while gets
print if /start/../end/
end
範囲は case 文で使用できます:
サンプル
#!/usr/bin/ruby
# -*- coding: UTF-8 -*-
score = 70
result = case score
when 0..40
"悪い点数"
when 41..60
"もう少しで合格"
when 61..70
"合格点"
when 71..100
"良好な点数"
else
"不正な点数"
end
puts result
試してみる »
上記の例の実行出力結果は次のとおりです:
合格点
間隔としての範囲
範囲の最後の用途は間隔検出です:指定された値が指定された範囲内にあるかどうかをチェックします。=== 等価演算子を使用して計算を完了する必要があります。
サンプル
#!/usr/bin/ruby
# -*- coding: UTF-8 -*-
if ((1..10) === 5)
puts "5 は (1..10) にあります"
end
if (('a'..'j') === 'c')
puts "c は ('a'..'j') にあります"
end
if (('a'..'j') === 'z')
puts "z は ('a'..'j') にあります"
end
試してみる »
上記の例の実行出力結果は次のとおりです:
5 在 (1..10)
c 在 ('a'..'j')
その他の拡張