list = [5, 10, 20, 40, 50, 42, 35, 26, 18]
所以在這個例子中,我不想要一個元素超過40的值,如果有的話,我希望元素的值爲40,例如,與值50元素將成爲40有沒有一種方法可以爲數組中的元素設置最大值?
list = [5, 10, 20, 40, 50, 42, 35, 26, 18]
所以在這個例子中,我不想要一個元素超過40的值,如果有的話,我希望元素的值爲40,例如,與值50元素將成爲40有沒有一種方法可以爲數組中的元素設置最大值?
list.map! { |i| i > 40 ? 40 : i }
=> [5, 10, 20, 40, 40, 40, 35, 26, 18]
map
方法允許你轉換應用到您的收藏中的所有元素,所以我覺得非常適合在這種情況下。或者,如果您一次只填充數組中的一個元素,則可以在40或更少的情況下插入實際值,否則爲40。
如果40
是最大,需要從min
40和元素;)
list = [5, 10, 20, 40, 50, 42, 35, 26, 18]
list.map{ |v| [40, v].min }
# => [5, 10, 20, 40, 40, 40, 35, 26, 18]
如果你使用Ruby 2.4或更新版本,您可以使用Comparable#clamp:
list.map { |n| n.clamp(0, 40) }
# => [5, 10, 20, 40, 40, 40, 35, 26, 18]
請注意,這也會將最小值固定爲0
。這對你的情況可能有用也可能沒有用,只有當所有項目都是非負數時才適用。
這是一個潛在有用的評論,但沒有足夠的信息來說明這是否是「錯誤」的方法。在數字被隱式假定爲非負數的情況下,它提供了更強大的可靠性。答案中解釋了這個假設。 – Drenmi
問題中沒有任何內容似乎表明負數應該被0代替。另外,爲什麼這種方法比'min'更強健? –
您可以編寫'[5,10,20,40,5000,42,35,26,18] .map {| n | n.clamp(-Float :: INFINITY,40)}#=> [5,10,20,40,-5000,40,35,26,18]'但我同意@Eric在這裏不提供任何優於磨損方法'min'的優勢。不過,很高興知道另一種名字很好的方法。它將與'squeeze','chomp','chop','scrub','lazy','chunk','dig'等一起,當然還有操作符'splat'。 –
答案是「是」。如果它是「否」,Ruby將居住在死亡語言垃圾箱中,我們不會談論它。你的問題應該是「我怎麼......」? –