2015-11-02 51 views
4

我的任務是從數組中選擇最高和最低的數字。我想我已經明白了自己想做什麼,但只是努力以正確的格式訪問信息以符合通過標準。在一行中選擇數組的第一個元素和最後一個元素

def high_and_low(numbers) 
    array = numbers.split(" ").map! {|x| x.to_i} 
    array.sort! {|a,b| b <=> a} 
    puts array[0, -1] 
end 

數字可能看起來像"80 9 17 234 100",並且通過,我需要輸出"9 234"。我正在嘗試puts array.first.last,但一直未能弄清楚。

回答

0

最簡單的方法是隻使用minmax

numbers = "80 9 17 234 100" 
array = numbers.split(' ').map(&:to_i) 
[array.min, array.max] #=> [9, 234] 

您的解決方案是相當不錯的,如果標準是一些不具有一個內置的功能。

+0

謝謝,我最終不得不使用: def high_and_low(數字) array = numbers.split(「」).map! {| X | x.to_i} return array.minmax.reverse.join(「」) end 感謝您的幫助。 Bleh,格式問題 –

+0

您最終使用了哪種解決方案? – weezing

12

還有就是Array#minmax方法不正是你所需要的:

array = [80, 9, 17, 234, 100] 
array.minmax 
#=> [9, 234] 

使用在你high_and_low方法,是以輸入並返回結果爲字符串上下文:

def high_and_low(numbers) 
    numbers.split.    # `split` splits at whitespaces per default 
      map(&:to_i).  # does the same as `map { |x| x.to_i }` 
      minmax.    # extracts min and max 
      reverse.   # reverses order to maxmin 
      join(' ')   # joins min and max with a whitespace 
end 

high_and_low('80 9 17 234 100') 
#=> "234 9" 
+0

感謝您的幫助,我忘了提及我必須發佈最大值然後min,我最終使用array.minmax.reverse.join。爲什麼不能使用[0,-1]? –

+1

@EatsIndigo:由於'[]'方法不接受多個參數,但'values_at'確實:'array.values_at(0,-1)'可以工作。 – spickermann

0

如果你不需要逗號嘗試:

array.minmax.join(「」)

相關問題