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
返される配列のサイズです。 arr
の "middle"が返される場合はoption==:avg
、 else 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
という2番目のパラメータの他の値の戻り値を示します。
(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
アレイの中央には最適です!しかし、 'num <= 2'ならば、戻り配列の負のインデックスのために' [] 'を返します。 'num> = 9'の場合、' array [index + range] 'が存在しないので、より短い配列を返します。 – ReidasaurusRex
配列境界外の範囲に対する期待値は何ですか?切り詰めますか?最後に正確に範囲の長さである必要がありますか?ここでは、より多くのコードを記述する前に定義する必要がある場合があります。 – Anthony
編集時に対処しようとしました。 return_ary.length == init_ary.length <5の場合の文字列 – ReidasaurusRex