【问题标题】:Modifying an element in a Ruby array at a specified index?在指定索引处修改 Ruby 数组中的元素?
【发布时间】:2014-03-24 19:36:04
【问题描述】:

我正在尝试学习 Ruby 中的数组操作,但无法修改数组中的指定元素。

对于上下文,我正在编写一个程序,它产生一个矩阵,然后对所述矩阵执行操作。矩阵定义为matix(i,j,val),其中i 是行数,j 是列数,val 是在实例化矩阵时填充矩阵每个单元格的值。

矩阵存储在由多个一维数组创建的data变量中,如下所示:

@data = Array.new(i) { Array.new(j) {val} }

我正在尝试编写一个函数set(i,j,val),它将(i,j) 处的元素设置为val 中存储的值。我正在尝试通过迭代来实现这一目标:

_i = 0
@data.each do |sub|
  if _i == i
    sub[j] = val
  end
  _i += 1
end

代码应该迭代到矩阵中的ith 行并更改j 列中的元素。不幸的是,sub[j] = val 不会更改该值。如何更改指定索引j处的数组值?

【问题讨论】:

  • 我们需要查看您的示例输入以及您希望输出的样子。
  • 1) 为什么不使用实际的二维矩阵来存储值,并添加一个返回 @data[i][j] || @val 的 getter? 2)如果您尝试创建稀疏矩阵,您可能会考虑使用散列而不是一维数组作为后备存储?这有一个额外的好处是可以为哈希分配一个默认值。

标签: ruby arrays matrix


【解决方案1】:

不要想太多。显然,您知道需要更改的索引,因此您可以通过将 [] 方法链接在一起直接访问它们。您不需要对单个值进行迭代:

@data[i][j] = new_value

【讨论】:

  • 我不知道 Ruby 支持这种表示法。这无疑是解决问题的最直观的方法。
  • @Adam,您可以在 Ruby 中将几乎任何东西链接在一起。在这种情况下,第二组括号作用于第一组括号的返回值(从左到右计算所有内容)。
  • 亚当,为了清楚起见,这不是“符号”。当 Zach 谈到 [] 方法时,这正是他的意思:Array#[]。读一读,不要被该方法的不寻常编写方式所迷惑。如果它是Array#get_element,你会写@data.get_element(i).get_element(j),这意味着(@data.get_element(i)).get_element(j)。如果@data 是一个 2x3(行 x 列)矩阵,它可能如下所示:[[1,2,3], [4,5,6]],在这种情况下为@data[1][2] = (@data[1])[2] = ([4,5,6])[2] = 5
猜你喜欢
  • 1970-01-01
  • 2015-05-06
  • 2021-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-19
  • 1970-01-01
  • 2019-11-20
相关资源
最近更新 更多