如何在Ruby中将两个字符串转换为两个数组
Posted
技术标签:
【中文标题】如何在Ruby中将两个字符串转换为两个数组【英文标题】:How to convert two strings into an array of two in Ruby 【发布时间】:2022-01-10 08:15:19 【问题描述】:我希望从哈希中提取键和值。我设法检索数据,但格式错误。我正在执行以下操作:
@message_count_series = @messages.collect |p| "[#p["created_at"], #p["total_cnt"]]"
=> ["[2021-12-02 13:21:19.837233, 3]", "[2021-11-20 13:54:54.846048, 3]"]
我想得到的是:
=> [[2021-12-02 13:21:19.837233, 3], [2021-11-20 13:54:54.846048, 3]]
只是没有引号(不是字符串)。
我尝试了以下方法:
@message_opened_series = @messages.collect |p| ["#p["created_at"], #p["opened_cnt"]"]
=> [["2021-12-02 13:21:19.837233, 1"], ["2021-11-20 13:54:54.846048, 0"]]
这让我更接近了,但现在我的数据被视为数组中的字符串。
以下似乎可行,但可能不是很健壮
@message_opened_series = @messages.collect |p| [DateTime.parse("#p["created_at"]"), ("#p["opened_cnt"]").to_i]
=> [[Thu, 02 Dec 2021 13:21:19 +0000, 1], [Sat, 20 Nov 2021 13:54:54 +0000, 0]]
请问有更好的方法吗?
【问题讨论】:
您的原始哈希看起来如何?原始哈希值的数据类型是什么?为什么你认为你的最后一个版本,有效,可能不健壮?哈希是否可能包含无效数据? 您想要的结果不是合法的 Ruby 对象,因此,您不可能得到这个结果。 【参考方案1】:@message_opened_series =
@messages.collect |p| [p["created_at"].to_s, p["opened_cnt"]]
=> [["2021-12-02 13:21:19.837233", 3], ["2021-11-20 13:54:54.846048", 3]]
【讨论】:
以上是关于如何在Ruby中将两个字符串转换为两个数组的主要内容,如果未能解决你的问题,请参考以下文章