0

たとえば、次のような配列があります。

40,42,45,49,50,52,54,55 etc

ポストクエリを介して、いくつかの値を選択して取得しています:たとえば、40-50、次にこの値を2つの数値に分割します40 and 50(ただし、分割の主な問題ではありません。質問は別のものです)。この 2 つの値を比較する必要があるため、配列の値が値に含まれている必要があり[40...50)ます。したがって、この間隔にあるものはすべて、他の計算のために選択する必要があります...これを行う方法は? 地図があればいいのですが、どうやって?

4

4 に答える 4

3

これを試して:

arr = [40,42,45,49,50,52,54,55]
min, max = "40-50".split('-').map {|s| s.to_i }
range = min..max
arr.select {|n| range.include? n }

=> [40, 42, 45, 49, 50]

これには50が含まれます

range = 40...5050を除外するために使用

ありがとう@gregates

すべてのバージョンで同じように動作することを確認してください

于 2012-11-07T19:45:57.290 に答える
2

Rails を使用しているので、その.in?ヘルパーを活用してコードをもう少し読みやすくすることができます

arr = [40,42,45,49,50,52,54,55]
arr.select{|a| a.in?(40..49)} # => [40, 42, 45, 49]

ちなみに、3 つのドットを使用して範囲を構成する場合、上限は含まれません。

arr = [40,42,45,49,50,52,54,55]
puts arr.select{|a| a.in?(40...50)} # => [40, 42, 45, 49]

範囲とドット

(1..5).to_a # => [1, 2, 3, 4, 5]
(1...5).to_a # => [1, 2, 3, 4]
于 2012-11-07T19:50:42.547 に答える
1

Suppose you have a string '40-50'

Then you will get numbers for your range

'40-50'.split('-').map(&:to_i) #=> [40,50]

One way is using intersection:

(40...50).to_a & [40,42,45,49,50,52,54,55] #=> [40,42,45,49]
于 2012-11-07T19:55:30.543 に答える
1
orig_arr=[40,42,45,49,50,52,54,55]
range_str='40-50'
min, max = range_str.split("-").map{|num| num.to_i}
orig_arr.select{|x| (min..max) === x}
于 2012-11-07T19:51:54.667 に答える