Ruby on rails 我怎么能';加入';在结果字符串的开头添加要连接的第一个字符的数组?
我正在使用RubyonRails3,我正在尝试Ruby on rails 我怎么能';加入';在结果字符串的开头添加要连接的第一个字符的数组?,ruby-on-rails,ruby,arrays,ruby-on-rails-3,join,Ruby On Rails,Ruby,Arrays,Ruby On Rails 3,Join,我正在使用RubyonRails3,我正在尝试加入一个带有&字符的数组。我阅读了Ruby文档 我的阵列是: ["name1", "name2"] 如果我这样做 ["name1", "name2"].join("&") 结果是 name1&name2 &name1&name2 # Note the first "&" 我希望结果是一样的 name1&name2 &name1&name2 # Note the first "&
加入一个带有&
字符的数组。我阅读了Ruby文档
我的阵列是:
["name1", "name2"]
如果我这样做
["name1", "name2"].join("&")
结果是
name1&name2
&name1&name2 # Note the first "&"
我希望结果是一样的
name1&name2
&name1&name2 # Note the first "&"
解决办法是
["", "name1", "name2"].join("&")
但我认为这不是一条“正确的道路”
那么,如果不使用[”“,“name1”,“name2”],&name1&name2>我怎么能拥有&name1&name2
。连接(&“
?
整个连接点就是只在连接的项目之间获得字符。你想在每件物品前面放一个。我不知道有什么捷径,但更自然的做法是映射它们,然后在没有分隔符的情况下加入它们:
["name1", "name2"].map{|item| '&'+item}.join
Join的意思是不在字符串前面加前缀。还有一个选择:
"&#{["name1","name2"].join("&")}"
另一种替代解决方案:可以使用构建字符串
["name1", "name2"].inject("") { |str, elem| str += "&#{elem}" }
[编辑]
作为一名完成论者,我必须补充一点,您不应该忘记,反复修改字符串可能会导致性能下降,如果您多次这么做的话。如果您有一个大数组,可以使用StringIO
:
require 'stringio'
["name1", "name2"].inject(StringIO.new) { |str, elem| str << "&#{elem}" }.to_s
需要“stringio”
[“name1”,“name2”].inject(StringIO.new){| str,elem | str我有时有相反的要求。我有时想在连接的字符串后面放一个字符。要做到这一点,我通常会这样做
["name1", "name2"].join("&") + "&"
如果您想知道“为什么Ruby不实现在开始时添加东西的功能?”,我的答案是,如果要处理这种情况,有太多的可能性需要考虑:
在元素之间有&
在元素之间和开始之前是否有&
元素之间和结束后是否有&
元素之间、开始之前和结束之后是否有&
元素之间是否有&
,结束后是否有\n
元素前面有?
,元素之间有和,元素结束后有\n
如果没有元素,做些特别的事情
作为补充说明,如果您试图建立URL,您可能希望使用库而不是手动创建。考虑到数组的大小,您提供的答案的稍微修改形式可能会减少计算强度
(['']+Array.wrap(classes)).join('&')
这适用于类
是否是类型数组
[“name1”、“name2”].join('&').prepend('&'))
即使在为空时,这始终会产生&
。
此方法经过调整后也能很好地处理更多项目。例如,使用列表创建项目符号列表。join(“\n-”)。prepend(“-”)