如何在Ruby中的Array类中对数组的每个元素进行平方?

Posted

技术标签:

【中文标题】如何在Ruby中的Array类中对数组的每个元素进行平方?【英文标题】:How to square each element of an array in Array class in Ruby? 【发布时间】:2013-05-19 08:54:36 【问题描述】:

我的部分代码如下:

class Array
  def square!
    self.map |num| num ** 2
    self
  end
end

当我打电话时:

[1,2,3].square!

我希望得到 [1,4,9],但我却得到 [1,2,3]。为什么会这样?当我打电话时:

[1,2,3].map |num| num ** 2

在类方法之外,我得到了正确答案。

【问题讨论】:

有什么理由(性能?)销毁原始数组(语句/命令)而不是返回一个新数组(表达式/函数)? 您使用map 创建一个正方形数组,然后将其丢弃并返回self 【参考方案1】:

你必须使用Array#map!,而不是Array#map

Array#map -> 为 self 的每个元素调用给定块一次。创建一个包含块返回值的新数组。

Array#map! -> 为 self 的每个元素调用一次给定块,将元素替换为块返回的值。

class Array
  def square!
    self.map! |num| num ** 2
  end
end

[1,2,3].square! #=> [1, 4, 9]

【讨论】:

您可以省略self 行。 self.map! .. 已经返回数组

以上是关于如何在Ruby中的Array类中对数组的每个元素进行平方?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Ruby 中对数字数组求和?

Ruby 动态更新嵌套数组中的值

从Ruby中的数组中删除重复元素

c#中Array类中的常用方法的功能

在Ruby中对数组使用冒泡排序方法[关闭]

如何在 C# 中对数组执行集合减法?