如何在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中将两个字符串转换为两个数组的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Ruby 中将十进制值数组转换为 MAC 地址?

在rails中将字符串转换为数组

如何在 Ruby 中将字符串或整数转换为二进制?

如何在 Ruby 中将字符串或整数转换为二进制?

如何在 Ruby 中将 IO 对象转换为字符串?

在Ruby中将unicode代码点转换为字符串字符