Ruby:对数组元素进行赋值

标签 ruby variable-assignment

我是初学者,我想创建一个矩阵。例如:

0 1 1
1 1 1
1 1 2

irb(main):001:0> t = [[1]*3]*3
=> [[1, 1, 1], [1, 1, 1], [1, 1, 1]]
irb(main):002:0> (0...3).each do |x| t[x][x]=x end
=> 0...3
irb(main):003:0> t
=> [[0, 1, 2], [0, 1, 2], [0, 1, 2]] # why all values changed?

出了什么问题?

最佳答案

构建数组的方式不会为每一行创建新数组,而是为所有行引用相同的数组:

t.each do |row|
  p row.object_id
end

# 70325094342320
# 70325094342320
# 70325094342320

它与:

相同
a = [1, 1, 1]
t = [a, a, a]

尝试一下看看差异:

t = [[1] * 3, [1] * 3, [1] * 3]

关于Ruby:对数组元素进行赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39471424/

相关文章:

ruby - 使用 win32ole 从 Ruby 调用 vbscript 函数是否实用?

android - calabash-android 旋转 : how to rotate in calabash-android v0. 5

ruby - 在 Rails 中,如何向 String 类添加一个新方法?

测试变量存在的 Javascript 多重赋值 : var obj = obj = obj || {}

python - 实例化具有任意数量属性的类

ruby - 如何从数组成员的角度在 ruby​​ 中表达数组中的关系?

ruby-on-rails - 如何从周数中获取日期?

python - 未绑定(bind)本地错误 : local variable referenced before assignment (Python)

c# - 为什么局部变量在一种方法中赋值,但在几乎相同的方法中未赋值?

JavaScript:如何在表达式中多次获取和使用一个值