list = [5, 10, 20, 40, 50, 42, 35, 26, 18]
所以在这个例子中,我不希望元素超过值40,如果是,我希望元素的值为40,例如值为50的元素将变为40。
答案 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
。这可能对您的情况有用,也可能没有用,并且只适用于预期所有项目都是非负数的情况。