【问题标题】:How can I map a new array from a specific (known) pattern?如何从特定(已知)模式映射新数组?
【发布时间】:2012-01-30 00:48:20
【问题描述】:

一般来说,如何根据已知模式确定如何迭代数组?

具体来说,这是我想遍历的模式,返回一个数组数组:(每个数字都是原始数组的索引值:[0, 1, 2, 3] )

0

0,1

0,1,2

0,1,2,3

1

1,2

1,2,3

2

2,3

3

【问题讨论】:

  • 你能举一个你想做的例子吗?
  • 上一张海报@SimonMayer 了解了我的目标

标签: ruby arrays design-patterns iteration


【解决方案1】:
arr = [0,1,2,3]
main_array = []

arr.each_index{|i|
  arr.each_index{|j|
    if i <= j
      a = arr[i..j]
      main_array.push(a)
    end
  }
}
p main_array

【讨论】:

  • 谢谢,这似乎可以解决问题,但是如何您是如何找到这个解决方案的?通过这样的模式迭代是否有一种精简的思维方式?可以将 for 循环简化为数学问题吗?
  • 基本上是数学的。我可以看到您的模式有两个循环:一个循环遍历并确定数组的第一部分;另一个(包含在其中)迭代并确定每个数组的长度。在方法方面,我想我以相同的顺序解决了它。首先得到起点i。接下来,我查看了如何从 i 开始数组并将其切片为不断增加的长度 j
【解决方案2】:

这是另一个更简洁的选择:

a.size.times { |i| (a.size - i).times { |j| p a[i..j+i] } }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-17
    • 2018-06-07
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    • 2018-07-17
    • 2017-06-18
    相关资源
    最近更新 更多