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