我正在使用Ruby on Rails 3,我正在尝试使用join
字符的&
数组。我阅读了Ruby文档about that。
我的数组是:
["name1", "name2"]
如果我这样做
["name1", "name2"].join("&")
结果为
name1&name2
我希望结果为
&name1&name2 # Note the first "&"
解决方案
["", "name1", "name2"].join("&")
但我认为这不是“正确的方式”。
那么,如何在不使用&name1&name2
的情况下["", "name1", "name2"].join("&")
?
答案 0 :(得分:12)
整个加入点是你只在连接的项目之间获得字符。你想要每个项目前面的一个。我不知道一个简短的方法,但只是映射它们然后在没有分隔符的情况下加入它们似乎更自然:
["name1", "name2"].map{|item| '&'+item}.join
答案 1 :(得分:1)
Join意味着不添加字符串。这是另一种选择:
"&#{["name1","name2"].join("&")}"
答案 2 :(得分:1)
另一种替代解决方案:您可以使用Enumerable#inject
来构建字符串。
["name1", "name2"].inject("") { |str, elem| str += "&#{elem}" }
[编辑]
要成为一个完成主义者,我必须补充一点,你不应该忘记,如果你做了很多次,那么一遍又一遍地修改一个字符串会导致性能不佳。如果您有一个大型数组,则可以使用StringIO
:
require 'stringio'
["name1", "name2"].inject(StringIO.new) { |str, elem| str << "&#{elem}" }.to_s
答案 3 :(得分:1)
我有时候会有相反的要求。我有时想在连接字符串之后添加某个字符。要做到这一点,我通常会做
["name1", "name2"].join("&") + "&"
如果你想知道“为什么Ruby在开始时没有实现添加内容的能力?”,我的答案是,如果要处理这种情况,那么有太多的可能性需要考虑:
&
?&
吗?&
,结束之后?&
吗?&
,结尾之后有\n
吗??
,元素之间有&
,结尾之后有\n
吗?作为旁注,如果您尝试构建URL,则可能需要使用库而不是手动执行。
答案 4 :(得分:0)
考虑到数组的大小,您提供的答案稍有修改可能会减少计算量。
(['']+Array.wrap(classes)).join('&')
这适用于classes
是否为Array
答案 5 :(得分:0)
["name1", "name2"].join('&').prepend('&')