首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby数组有条件地替换数组中的项

Ruby数组有条件地替换数组中的项
EN

Stack Overflow用户
提问于 2017-06-30 18:20:59
回答 3查看 51关注 0票数 0

我正在努力构建一个小的ruby代码片段来比较两个数组,并有条件地替换其中一个数组中的项。我有一个“书”模型,它有标题,标题有章节。我有一个数组,其中包含一本书的所有行,并希望用该数组中相应的标题替换章节。

代码语言:javascript
复制
def replace_chapters_by_titles(all_lines_of_a_book)
  books = Book.all
  all_lines_of_a_book.each do |line|
    books.each do |chapter|
    if (line =~ /#{book.chapter}/)
    line = "#{book.title}" #this is where I am not sure what I should do
    end
    end
  end
end

我猜这对数组没有影响,因为我只是将"#{book.title}“放在一行中,而没有将任何东西推入数组"all_lines_of_a_book”。有人能帮我找到正确的语法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-06-30 18:29:11

您需要推送到数组中行所在的索引,请尝试下面的代码

代码语言:javascript
复制
def replace_chapters_by_titles(all_lines_of_a_book)
  books = Book.all
  all_lines_of_a_book.each_with_index do |line, index| # note this
    books.each do |chapter|
      if (line =~ /#{book.chapter}/)
        all_lines_of_a_book[index] = "#{book.title}" # and this
      end
    end
  end
  all_lines_of_a_book # probably you want to return new array
end
票数 0
EN

Stack Overflow用户

发布于 2017-06-30 18:32:12

这种方法可能会有所帮助:

代码语言:javascript
复制
arr   # => [1, 22, 5, 66, 77, 8, 88, 0] 
subst # => [9,  8, 7,  6,  5, 4,  3, 2]
cond = lambda { |x| x>10 } # condition for substitution
arr.zip(arr.map(&cond)).each_with_index.map do |(a,b),i| 
  if b then subst[i] else a end 
end # => [1, 8, 5, 6, 5, 8, 3, 0] 
票数 0
EN

Stack Overflow用户

发布于 2017-07-01 00:03:32

代码语言:javascript
复制
arr   # => [1, 22, 5, 66, 77, 8, 88, 0] 
subst # => [9,  8, 7,  6,  5, 4,  3, 2]

arr.each_index.map { |i| arr[i] > 10 ? subst[i] : arr[i] }
  # => [1, 8, 5, 6, 5, 8, 3, 0]

代码语言:javascript
复制
arr.each_with_index.map { |n,i| n > 10 ? subst[i] : n }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44844164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档