2015-11-02 84 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(“”)

相关问题