Ruby on rails 如何在ruby中通过数组进行迭代并比较

Ruby on rails 如何在ruby中通过数组进行迭代并比较,ruby-on-rails,ruby,arrays,Ruby On Rails,Ruby,Arrays,例如,我有这样的数组: 40,42,45,49,50,52,54,55 etc 通过post查询,我从select some value(选择某个值):例如40-50,然后将该值拆分为两个数字:40和50(但这不是主要问题,拆分后,问题在另一个数字中)。 我需要比较这两个值,以便数组值必须在[40…50)值中。因此,我必须为我的其他计算选择此间隔中的所有内容。。。 如何做到这一点?可以使用map,但是如何做到呢?试试这个: arr = [40,42,45,49,50,52,54,55] min

例如,我有这样的数组:

40,42,45,49,50,52,54,55 etc
通过post查询,我从select some value(选择某个值):例如40-50,然后将该值拆分为两个数字:
40和50
(但这不是主要问题,拆分后,问题在另一个数字中)。 我需要比较这两个值,以便数组值必须在
[40…50)
值中。因此,我必须为我的其他计算选择此间隔中的所有内容。。。 如何做到这一点?可以使用map,但是如何做到呢?

试试这个:

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个

使用
范围=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]

假设您有一个字符串
'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]

但也要注意,我必须选择40,但50不需要做
来在范围上添加一个
。范围#包括?很好。范围
(40…50)
包括40,但不是50——注意关键的第三个
@gregates:哦,你也提到了第三个点。没有看到:)谢谢……还有“谢谢”对于盲人管理员…谁关闭了这个问题标准库:(40…50)。包括?(a)是的,它在另一个答案中:)“最快的”用什么术语,确切地说?@sawa,cpilko,bažmegakapa,Mark,hayden谢谢管理员们!这个问题有什么不好的地方?你们都是盲人吗,或者说你们都很愚蠢?
(40...50).to_a & [40,42,45,49,50,52,54,55] #=> [40,42,45,49]