使用each_with_index将项目插入for循环中,而不是替换

时间:2019-05-31 22:19:12

标签: ruby

当今大多数市场网站都将广告部分注入列表的中间,从而为用户提供了一个注册表单。

enter image description here

希望更好地了解each_with_index的工作方式以及将div插入对象列表的正确方法。让我们列出一个列表,例如10个拳击工作室,并使用以下代码将div注入列表的中间。如何在不完全替换记录的情况下注入div?

预计:10个拳击工作室,其中新的div排名第六(总共11个项目)

实际:9个拳击工作室,其中新的div取代了排名第六的拳击工作室之一

@list.each_with_index do |item, idx|
  if((idx + 1) % 6 == 0)
    # Insert ad partial
  else
  # Print out each object in the list
  end
end

2 个答案:

答案 0 :(得分:1)

给出变量

@list = (1..10).map { |n| "item #{n}"}
#=> ["item 1", "item 2", "item 3", "item 4", "item 5", "item 6", "item 7", "item 8", "item 9", "item 10"]

@signup = 'signup form'
position = 6

您可以迭代并打印要插入的元素,而无需修改数组:

@list.each_with_index do |item, idx|
  p @signup if position == idx + 1 # render the form
  p item
end

# "item 1"
# "item 2"
# "item 3"
# "item 4"
# "item 5"
# "signup form"
# "item 6"
# "item 7"
# "item 8"
# "item 9"
# "item 10"

答案 1 :(得分:0)

使用Array#[]

> list = [1,2,3]
#⇒ [1, 2, 3]
> list[1...1] = 0 # insert at position 1
> list
#⇒ [1, 0, 2, 3]

在第6个位置插入它:

list = [1] * 15
(5...list.size).step(6) { |i| list[i...i] = 0 }
list
#⇒ [1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1]