【问题标题】:Map array, iterate nested array [closed]映射数组,迭代嵌套数组
【发布时间】:2016-04-10 02:23:13
【问题描述】:

请参考以下代码:

x = 3
arr = ("a".."z").to_a
arr2 = [1, 2, arr[ i ], 4]
arr3 = arr2.map * x

期望的输出:

arr3 # => 12a412b412c4

实现此输出的最佳做法是什么?

【问题讨论】:

  • 什么是i? ......
  • @sawa:我相信它应该是下一行中map 的索引...有点时间旅行...
  • 已经看到 i 在其他示例中用作计数器变量。在这种情况下,希望 arr 的索引与 arr2 映射到 arr3 的次数一起计数。
  • 布伦丹,我看到你已经获得 4 票结束。这太糟糕了,因为有一些有趣的答案。我希望您将编辑以澄清问题。那些回答过的人都对你想要什么做出了同样的假设。如果它们是正确的,我建议您只显示给定的输入和所需的输出。 arr2 特别是一个问题,因为 i 没有定义。顺便说一句,这经常发生在有人发布问题然后走开时。
  • 对不起,我还没有走开。这是第二次在这里发布关于堆栈溢出的问题。所以我为不知道行为规则而道歉。没有冒犯的意思。并非常感谢大家的回答。

标签: arrays ruby dictionary nested


【解决方案1】:
("a"..."z").first(3).map{|chr| [1, 2, chr, 4]}.join
# => "12a412b412c4"

【讨论】:

  • 很酷的解决方案。我建议如果您将3 替换为x 它看起来更类似于OP 的要求
【解决方案2】:

我不确定你在做什么,所以尽量接近你的原始代码:

x = 3
arr = ("a".."z").to_a
arr2_generator = lambda { |i| [1, 2, arr[i], 4] }
arr3 = x.times.map(&arr2_generator)
puts arr3.join

在您实际定义它之前无法使用i,也无法静态定义它,因为它会从一个实例更改为另一个实例 - 即无法编写arr2 以便稍后更改.相反,我们使用 lambda 表达式,它将接受 i 并给出 [1, 2, arr[i], 4]

最后,如果你只打印数组,你会得到每行一个元素;所以我使用join 将所有内容压缩成一个字符串。

【讨论】:

  • @mudasobwa:好点;我忽略了join 使列表变平。
  • 第 4 行的 & 有什么作用?
  • lambda创建的Proc提升成块。
【解决方案3】:
enum = ('a'..'z').to_enum
3.times.map { [1,2,enum.next,4] }.join
  #=> "12a412b412c4" 

【讨论】:

    【解决方案4】:

    您可以将Array::new 与块一起使用:

    x = 3
    arr = ("a".."z").to_a
    Array.new(x) { |i| [1, 2, arr[i], 4] }.join
    #=> "12a412b412c4"
    

    【讨论】:

      猜你喜欢
      • 2019-08-13
      • 2013-03-21
      • 1970-01-01
      • 2021-05-27
      • 1970-01-01
      • 2013-07-17
      • 2013-08-08
      • 2013-05-05
      • 2020-09-25
      相关资源
      最近更新 更多