例如,我有这样的数组:
40,42,45,49,50,52,54,55 etc
通过后查询,我从选择一些值中得到:例如 40-50,然后我将此值拆分为两个数字:(40 and 50
但这不是主要问题,使用拆分,问题在另一个)。我需要比较这两个值,以便数组值必须在[40...50)
值中。所以我必须为我的其他计算选择这个区间内的所有内容......如何做到这一点?或许有地图,但如何?
例如,我有这样的数组:
40,42,45,49,50,52,54,55 etc
通过后查询,我从选择一些值中得到:例如 40-50,然后我将此值拆分为两个数字:(40 and 50
但这不是主要问题,使用拆分,问题在另一个)。我需要比较这两个值,以便数组值必须在[40...50)
值中。所以我必须为我的其他计算选择这个区间内的所有内容......如何做到这一点?或许有地图,但如何?
试试这个:
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
由于您使用的是 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]
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}
假设你有一个字符串'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]