有没有办法修复数组中元素的最大值?

时间:2017-04-01 12:20:46

标签: ruby

list = [5, 10, 20, 40, 50, 42, 35, 26, 18]

所以在这个例子中,我不希望元素超过值40,如果是,我希望元素的值为40,例如值为50的元素将变为40。

3 个答案:

答案 0 :(得分:4)

list.map! { |i| i > 40 ? 40 : i }
 => [5, 10, 20, 40, 40, 40, 35, 26, 18] 

map方法允许您将转换应用于集合的所有元素,因此我认为在这种情况下非常适合。

或者,如果您一次为一个元素填充一个元素,您可以插入实际值,如果它是40或更小,否则为40。

答案 1 :(得分:4)

如果40是最大值,则需要来自40的min和元素;)

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]

答案 2 :(得分:3)

如果您使用的是Ruby 2.4或更新版本,则可以使用Comparable#clamp

list.map { |n| n.clamp(0, 40) }
# => [5, 10, 20, 40, 40, 40, 35, 26, 18] 

请注意,这也会将最小值修复为0。这可能对您的情况有用,也可能没有用,并且只适用于预期所有项目都是非负数的情况。