在Rails视图中映射并加入数组

时间:2015-05-22 08:03:29

标签: ruby-on-rails ruby ruby-on-rails-4

我在Ruby中有一个数组:

arr = ["aba", "bab", "abb"]

我想用“c”替换所有“a”,然后用分号连接元素。

# Replace "a" with "c"
replaced_arr = arr.map {|element| element.sub("a", "c") }

# Join with a ";"
joined_string = replaced_arr.join(";")

# "cbc; bcb; cbb"

如何在Rails视图中执行此操作

否则 <%= arr.map(|element| element.sub("a", "c")).join(";") %>给了我错误syntax error, unexpected keyword_end, expecting ')'

5 个答案:

答案 0 :(得分:4)

替代(和更短)的方式

<%= arr.join(";").gsub("a","c") %>

您遇到的错误也是因为语法错误。 map接受一个块,所以它应该以{{1​​}}开头,即

{}

另外要注意使用arr.map{|element| element.sub("a", "c")}.join(";") 只会替换第一次出现的模式。您可能希望使用sub全局替换所有匹配项。

答案 1 :(得分:1)

您应该使用{}

<%= arr.map{ |element| element.sub("a", "c") }.join(";") %>

答案 2 :(得分:1)

逻辑是完美的,只是一个小的语法错误。 map接受阻止{},但您正在传递(),请使用以下代码

<%= arr.map { |element| element.sub("a", "c") }.join(";") %>

希望这有帮助!

答案 3 :(得分:0)

您可以按如下方式使用它:

<%= arr.collect{|a| a.gsub("a","c")}.join(";") %>

答案 4 :(得分:0)

您也可以使用 gsub

arr.map { |x| x.gsub(/[a]/, "c")}.join(";")