2014-04-23 58 views
0

這是我的數組:array = ["1", "Hel", "6", "3", "lo" ]我想輸出數組中的最小數。那麼我想輸出數組中最大的數字?我如何實現這一目標?謝謝!簡單的紅寶石數組最小整數?

+0

根據您的要求做「數字」是否包含負數,浮點數,科學記數法?或者只是簡單的舊簡單的正整數? –

+2

你通過學習Ruby來完成它,然後做自己的家庭作業。 –

+1

這是排序分配的一部分嗎?我已經看到了今天使用'[「1」,「Hel」,「6」,「3」,「lo」]'陣列的不同人的幾個問題。 –

回答

3

那麼它取決於你想如何處理不容易被解析成數字的字符串元素。像「Hel」和「lo」。

如果你這樣做:

array.map {|x| Integer(x) rescue nil }.compact.min 
array.map {|x| Integer(x) rescue nil }.compact.max 

然後你就會忽略這些,這可能是正確的事情,假設你沒有一些原因考慮「赫爾」和「LO」有數字值。

+0

不錯。如何在第一個末尾添加'max'並刪除第二個? –

1
numbers = array.select { |x| x[/^-?\d+$/] }.map(&:to_i) 
# => [1, 6, 3] 
numbers.min 
# => 1 
numbers.max 
# => 6 
+0

想到[「103」,「12」] ... –

+0

哦,小心使用正則表達式,如果數組中有負數。你會想要考慮''-999「'這會排除。 –

+0

@MichaelBerkowski如果你開始說,那麼數組中可能會有小數點或科學符號。 OP沒有說清楚,所以我們會採取我們想要的任何方式。含糊不清是OP的錯。 – sawa

0
smallest, largest = 
["1", "Hel", "6", "3", "lo" ].reject{|s| s =~ /\D/}.minmax_by(&:to_i) 

smallest # => "1" 
largest # => "6" 
1

另一個變化負數工作

smalles, largest = 
["1", "Hel", "6", "3", "lo","-9" ].select { |x| x[/^-?\d+$/] }.minmax_by(&:to_i) 

最小#=> -9最大#=> 6

0

另一種方式:

array.join(',').scan(/-?\d+/).minmax_by(&:to_i) 
    #=> ["-4", "6"] 
0

我們可以使用unicode [[:數字:]]。而不是寫正則表達式如 array.join( '')掃描(/ [[:位:]] /)。minmax_by(&:to_i)