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

时间:2012-11-07 19:42:22

标签: ruby-on-rails ruby arrays

我有这样的数组:

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

通过后查询我从选择一些值:例如40-50,然后我将这个值拆分为两个数字:40 and 50(但这不是主要问题,有分裂,问题在于另一个)。 我需要比较这两个值,以便数组值必须是[40...50)值。所以在这个区间内我必须选择其他计算...... 这该怎么做? aybe有地图,但怎么样?

4 个答案:

答案 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

请参阅it running equally on all versions

答案 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]