我有一个数组:
array = ["10", "20", "50", "99"]
并希望将其转换为一个简单的逗号分隔字符串列表,如下所示:
"10", "20", "50", "99"
答案 0 :(得分:112)
array.join(',')
几乎可以做你想做的事;它不会保留值后面的引号,也不会保留后面的空格。
用于保留引号和空格:array.map{|item| %Q{"#{item}"}}.join(', ')
这将打印"\"10\", \"20\", \"50\", \"99\""
。假设问题确实需要单个字符串,那么转义的引号是必要的。
%Q
上的文档:string literals。
你可以使用inspect
作为suggested in another answer,我会说这是个人偏好。我不会,去看看source code并为自己选择。
有用的一面:array.to_sentence
会给你一个“1,2,3和4”样式输出,这可能很棒!
答案 1 :(得分:77)
["10", "20", "50","99"].map(&:inspect).join(', ') # => '"10", "20", "50", "99"'
答案 2 :(得分:17)
下面:
array.map {|str| "\"#{str}\""}.join(',')
答案 3 :(得分: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)作为一般理解的表示。
答案 4 :(得分:2)
最简单的解决方案是使用内置的“ .to_sentence”方法。
所以
[“ fred”,“ john”,“ amy”]。to_sentence输出“ fred,john和amy”
答案 5 :(得分:0)
这是一个稍微替代的解决方案,如果您需要将带有双引号字符串的数组转换为单引号列表(例如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
答案 6 :(得分:0)
这是使用 FCM 为 Android 设备发送推送通知的方式。 假设您想在用户发布有关其状态的内容时通知关注者,这就是您的做法。这是在 Rails 5.2.6 中为 Rest Apis 完成的---但是您仍然可以将其用于网络推送通知。这是用于发送到许多具有 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