【问题标题】:Trouble looping through an array of arrays in Ruby在 Ruby 中循环遍历数组的问题
【发布时间】:2016-11-05 16:08:50
【问题描述】:

我是一名初级 Ruby 程序员。我目前正试图找出我正在编写的代码有什么问题。基本上,我有一个数组数组,我试图遍历它并将每个数组作为一个字符串。但无论我做什么,除非我长手,否则没有任何效果,我真的不想这样做。 首先,这是我的数组:

array1 = [["Mittens", "is", "a", "cat"], ["Lily", "is", "a", "dog"], ["Alex", "is", "a", "turtle"]]

我想把结果放在上面,结果是这样的:

Mittens is a cat
Lily is a dog
Alex is a turtle

我已经尝试使用这个或它的变体几个小时了:

array1.each do |sub_array|
  sub_array.join(" ")
  puts sub_array
end

但每当我尝试它时,它最终看起来像这样:

Mittens
is
a
cat
Lily
is
a
dog
Alex
is
a
turtle

现在,如果我将“puts”更改为“print”,我将得到与之前相同的三个数组。因此,如果没有完成放弃并在我的程序中硬编码三个“放置”语句,我在这里缺少什么?我知道这一定是一件非常简单的事情,我想编写一个循环函数来轻松实现这一点。感谢您的关注!

【问题讨论】:

  • join 这样的方法不会改变原始对象。方法基本上不可能将对象从一个类更改为另一个类,因此 String 永远不会神奇地变成 Array。更改类的唯一方法是通过 assignment 创建一个新的变量引用,通常使用=。 Ruby 的方法在返回的内容与变异的内容方面可能有点棘手,因此请始终保持文档打开并验证您进行的每个调用。阅读手册并不丢人。

标签: arrays ruby loops each


【解决方案1】:

Array#join 不会改变 sub_array,它只是返回一个字符串。你可以像这样打印sub_array.join(" ")的结果:

array1.each do |sub_array|
  puts sub_array.join(" ")
end

【讨论】:

  • 谢谢,这是一个很好的解决方案,我并没有考虑过。
【解决方案2】:

正如 seph 所说,join 方法返回一个字符串,但不会将数组转换为字符串 (http://ruby-doc.org/core-2.2.0/Array.html#method-i-join)。

所以,你可以这样做:

 array1.each do |sub_array|
     sub_array_string = sub_array.join(" ")
     puts sub_array_string
 end

【讨论】:

  • 感谢您的建议!
  • 你说得对,但中间变量不是必需的,这会使这段代码过于冗长。不过,关于join 方法的功能的注释很重要。
  • @tadman 当然可以。这样做是为了证明它正在返回一个字符串。
猜你喜欢
  • 2018-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-21
  • 2022-01-21
  • 1970-01-01
相关资源
最近更新 更多