我有这样的数组:
40,42,45,49,50,52,54,55 etc
通过后查询我从选择一些值:例如40-50,然后我将这个值拆分为两个数字:40 and 50
(但这不是主要问题,有分裂,问题在于另一个)。
我需要比较这两个值,以便数组值必须是[40...50)
值。所以在这个区间内我必须选择其他计算......
这该怎么做? aybe有地图,但怎么样?
答案 0 :(得分: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...50
排除50
感谢@gregates
答案 1 :(得分:2)
由于您使用的是rails,因此可以利用其.in?
帮助程序使代码更具可读性
arr = [40,42,45,49,50,52,54,55]
arr.select{|a| a.in?(40..49)} # => [40, 42, 45, 49]
顺便说一句,如果使用三个点来构造范围,则不包括上边界。
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]
答案 2 :(得分: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}
答案 3 :(得分:1)
假设您有一个字符串'40-50
'
然后你会获得你的范围的数字
'40-50'.split('-').map(&:to_i) #=> [40,50]
一种方法是使用交集:
(40...50).to_a & [40,42,45,49,50,52,54,55] #=> [40,42,45,49]