【问题标题】:Flatten an array of strings in Ruby在 Ruby 中展平字符串数组
【发布时间】:2010-08-19 15:02:49
【问题描述】:

将字符串数组转换为字符串的最佳惯用(最简洁)方法是什么,同时保留每个元素的封闭引号。
也就是说,由此而来:

a = ["file 1.txt", "file 2.txt", "file 3.txt"]

我需要得到这个

"'file 1.txt' 'file 2.txt' 'file 3.txt'"

单引号和双引号可以在这里互换。 我所知道的最好的方法是使用 map 和注入/减少。

例如: a.map{|dir| "'" + dir + "'"}.join(' ')
eg2: a.reduce("'"){|acc, dir| acc += dir+"' "}

通过避免创建临时字符串(+ 运算符)可以提高性能。不过,这不是我的主要问题。有没有更简洁更简洁的方法来达到同样的效果?

【问题讨论】:

  • 数组成员中是否需要转义引号?
  • 否,仅保留数组的开头和结尾引号,如上所示。我意识到显示的引号不在字符串本身中,这就是为什么在仅对数组进行连接时它们会被剥离。

标签: ruby


【解决方案1】:

更短并不总是意味着更简单。您的第一个示例简洁、易读且易于更改,没有不必要的复杂。

a.map { |s| "'#{s}'" }.join(' ')

【讨论】:

    【解决方案2】:

    试试

    "'#{a.join("' '")}'"
    

    或者打高尔夫球

    ?'+a*"' '"+?'
    

    【讨论】:

    • 所有这些引用都很挑剔,但到目前为止你已经得到了最好的答案。
    • 我并不是说这很糟糕,但它也不完全自然地阅读。这种事情即使是经验丰富的 Rubyist 也会“嗯?”乍一看。
    • 有趣的高尔夫推杆!
    【解决方案3】:

    试试这个:

    "'" + a.join("' '") + "'"
    

    【讨论】:

      【解决方案4】:
      "'"+a*"' '"+"'"
      

      "'#{a*"' '"}'"
      

      a.to_s[1...-1].gsub /",?/,"'"
      

      【讨论】:

        猜你喜欢
        • 2011-03-04
        • 1970-01-01
        • 2013-12-11
        • 1970-01-01
        • 1970-01-01
        • 2019-10-03
        • 2017-01-14
        • 2022-10-23
        • 1970-01-01
        相关资源
        最近更新 更多