Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 我怎么能';加入';在结果字符串的开头添加要连接的第一个字符的数组?_Ruby On Rails_Ruby_Arrays_Ruby On Rails 3_Join - Fatal编程技术网

Ruby on rails 我怎么能';加入';在结果字符串的开头添加要连接的第一个字符的数组?

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 "&

我正在使用RubyonRails3,我正在尝试
加入
一个带有
&
字符的数组。我阅读了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(“-”)