70

我有一个数组:

array = ["10", "20", "50", "99"]

我想把它转换成一个简单的逗号分隔的字符串列表,如下所示:

"10", "20", "50", "99"
4

7 回答 7

126

array.join(',')几乎会做你想做的事;它不会保留值周围的引号或后面的空格。

保留引号和空格:array.map{|item| %Q{"#{item}"}}.join(', ') 这将打印"\"10\", \"20\", \"50\", \"99\"". 假设问题确实需要单个字符串,则转义引号是必要的。

%Q关于:字符串文字的文档。

可以inspect按照另一个答案中的建议使用,我会说这是个人喜好。我不会,去看看源代码并自己选择。

除了有用的:array.to_sentence会给​​你一个“1、2、3和4”风格的输出,这很好!

于 2012-07-03T14:58:41.513 回答
86
["10", "20", "50","99"].map(&:inspect).join(', ') # => '"10", "20", "50", "99"'
于 2012-07-03T14:58:45.277 回答
18

这里:

array.map {|str| "\"#{str}\""}.join(',')
于 2012-07-03T14:58:29.683 回答
10

几个答案提供了使用#map, #inspect,的解决方案#join。对于涉及元素中嵌入的逗号和/或字符串分隔符的边缘情况,所有这些都无法获得正确的 CSV 编码的某些细节。

使用 stdlib 类CSV然后自己滚动可能是一个更好的主意。

irb> require 'csv'
=> true
irb> a = [10,'1,234','J.R. "Bob" Dobbs',3.14159]
=> [10, "1,234", "J.R. \"Bob\" Dobbs", 3.14159]
irb> puts a.to_csv
10,"1,234","J.R. ""Bob"" Dobbs",3.14159

如果此编码不需要关心嵌入式分隔符,或者仅用于某些内部表示,则 map.join 解决方案就足够了,但如果生成数据以与其他期望逗号分隔值 (CSV) 的程序交换,它们将失败一般理解的表示。

于 2012-07-03T16:57:36.857 回答
3

最简单的解决方案是使用内置的“.to_sentence”方法。

所以

["fred", "john", "amy"].to_sentence 输出 "fred, john, and amy"

于 2018-10-14T07:12:45.617 回答
2

这是一个稍微替代的解决方案,如果您需要将带有双引号字符串的数组转换为单引号列表(例如 SQL 查询),则特别方便:

"'#{["John Oliver", "Sam Tom"].join("','")}'"

'John Oliver', 'Sam Tom'

署名:https ://alok-anand-ror.blogspot.com/2014/04/ruby-join-array-elements-with-single.html

于 2019-07-16T17:39:33.010 回答
0

这是您可以使用 FCM for Android 设备发送推送通知的方式。假设您想在用户在其状态上发布某些内容时通知关注者,这就是您的操作方式。这是在 Rails 5.2.6 for Rest APIs 中完成的——但您仍然可以将其用于 Web 推送通知。这是为了向许多带有registration_ids的设备发送通知以定位关注者。宝石:控制器中的 fcm:

require "fcm"

def create_vibe(user)
  @vibe = user.vibes.new(content: @content, picture: @picture, video: @video, isvideofile: @isvideofile, video_thumbnail: @video_thumbnail, source: @source, background_color: @background_color)
  @followed = user.followers
  if @followed.present?
    @registration = @followed.map { |s| s.registration_id }
  end
  if @vibe.save
    fcm = FCM.new("") # set your FCM_SERVER_KEY

    options = {
      data: {
        notification_type: 1,
        title: "#{@vibe.user.username} " "has posted a new Vibe",
        body: "#{@vibe.content}",
        user_data: {
          vibe_id: @vibe.id,
          user_id: @vibe.user.id,
          background_color: @background_color,

        },
      },
    }
    response = fcm.send(@registration, options)
    puts response
    render :status => 200,
      :json => { :success => true,
                :info => "Vibe posted successfully",
                :vibe_info => {
        :content => @content,
        :picture => @picture,
        :video => @video,
        :video_thumbnail => @video_thumbnail,
        :isvideofile => @isvideofile,
        :source => @source,
        :fcm => options,
      } }
  else
    render :status => 200, :json => { :success => false, :result => "Vibe can't be blank" }
  end
end
于 2021-08-10T09:24:05.187 回答