def grab_part(arr, nbr, option=:avg)
return nil unless (1..arr.size).include?(nbr)
return nil if option!=:avg && !(nbr-1...arr.size).include?(option)
first = (option==:avg) ? (arr.size-nbr)/2 : option-nbr+1
arr[first,nbr]
end
nbr 是要返回的数组的大小。 option==:avg 如果要返回arr 的“中间”;否则option 是arr 的索引,标识要返回的数组的最后一个元素。
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
grab_part(arr,5) #=> [3, 4, 5, 6, 7]
grab_part(arr,5,9) #=> [6, 7, 8, 9, 10]
grab_part(arr,5,4) #=> [1, 2, 3, 4, 5]
下面是grab_part的第二个参数的其他值的返回值。
(1..arr.size).map do |n|
next if n==5
puts "grab_part(arr,#{n}) \#=> #{ grab_part(arr,n) }"
puts "grab_part(arr,#{n},#{arr.size-1}) \#=> #{grab_part(arr,n,arr.size-1)}"
puts "grab_part(arr,#{n},#{n-1}) \#=> #{grab_part(arr,n,n-1)}\n"
end
grab_part(arr,1) #=> [5]
grab_part(arr,1,9) #=> [10]
grab_part(arr,1,0) #=> [1]
grab_part(arr,2) #=> [5, 6]
grab_part(arr,2,9) #=> [9, 10]
grab_part(arr,2,1) #=> [1, 2]
grab_part(arr,3) #=> [4, 5, 6]
grab_part(arr,3,9) #=> [8, 9, 10]
grab_part(arr,3,2) #=> [1, 2, 3]
grab_part(arr,4) #=> [4, 5, 6, 7]
grab_part(arr,4,9) #=> [7, 8, 9, 10]
grab_part(arr,4,3) #=> [1, 2, 3, 4]
grab_part(arr,6) #=> [3, 4, 5, 6, 7, 8]
grab_part(arr,6,9) #=> [5, 6, 7, 8, 9, 10]
grab_part(arr,6,5) #=> [1, 2, 3, 4, 5, 6]
grab_part(arr,7) #=> [2, 3, 4, 5, 6, 7, 8]
grab_part(arr,7,9) #=> [4, 5, 6, 7, 8, 9, 10]
grab_part(arr,7,6) #=> [1, 2, 3, 4, 5, 6, 7]
grab_part(arr,8) #=> [2, 3, 4, 5, 6, 7, 8, 9]
grab_part(arr,8,9) #=> [3, 4, 5, 6, 7, 8, 9, 10]
grab_part(arr,8,7) #=> [1, 2, 3, 4, 5, 6, 7, 8]
grab_part(arr,9) #=> [1, 2, 3, 4, 5, 6, 7, 8, 9]
grab_part(arr,9,9) #=> [2, 3, 4, 5, 6, 7, 8, 9, 10]
grab_part(arr,9,8) #=> [1, 2, 3, 4, 5, 6, 7, 8, 9]
grab_part(arr,10) #=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
grab_part(arr,10,9) #=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
还有一些。
grab_part(arr,5,6) #=> [5, 6, 7, 8, 9]
#=> [3, 4, 5, 6, 7]
grab_part(arr,5,8) #=> [3, 4, 5, 6, 7]
#=> [5, 6, 7, 8, 9]
grab_part(arr,5,3) #=> [5, 6, 7, 8, 9]
#=> nil
grab_part(arr,5,10) #=> [3, 4, 5, 6, 7]
#=> nil