0

例如,我有这样的数组:

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

通过后查询,我从选择一些值中得到:例如 40-50,然后我将此值拆分为两个数字:(40 and 50但这不是主要问题,使用拆分,问题在另一个)。我需要比较这两个值,以便数组值必须在[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...50排除 50

谢谢@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]

顺便说一句,如果你用三个点来构造一个范围,它不包括上边界。

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
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 回答
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]
于 2012-11-07T19:55:30.543 回答