【问题标题】:String object to array ruby字符串对象到数组 ruby
【发布时间】:2015-05-03 02:21:49
【问题描述】:

我转换了我的数据库,我的一张表中的数据在转换中发生了变化。基本上,我想从: "{1,2}" to ["1", "2"] 在红宝石中。有什么想法吗?

此外,它不会总是只有两个数字,它会因表格中的每一行而异。

提前致谢!

【问题讨论】:

    标签: ruby-on-rails ruby arrays string


    【解决方案1】:
    "{1,22,33,444}".scan(/\d+/) #=> ["1", "22", "33", "444"]
    

    应该这样做。

    【讨论】:

    • 只需要注意“数字”类型。 OP 没有指定它一定是整数(尽管它可能是)
    • @jphager2,确实如此,但示例和对“仅 两个 数”的引用向我建议了自然数。如果要捕获的字符串不是自然数,那么当然需要不同的正则表达式。
    【解决方案2】:

    您也可以使用这种非正则表达式解决方案:

    "{1,22,33,444}".delete("{}").split(",")
      #=> ["1", "22", "33", "444"]
    

    【讨论】:

    • 您的方法的一种变体:"{1,22,33,444}".split(/[{,}]/)[1..-1] #=> ["1", "22", "33", "444"].
    • 哇。从来不知道在一行上相邻的两个字符串文字会被连接!不错!
    • @jphager2,有关更多信息,请参阅接受的答案here。如果有记忆,它来自 C/C++。在这里,Sid 可能只是写了delete("{}")
    • 感谢您的链接。我想最后我确实知道它,因为我已经通过使用 '\' 的续行使用它,但从未想过它。
    • @CarySwoveland 感谢您指出这一点,我已经编辑了我的答案。回顾关于字符串的 #delete 方法的 ruby​​ 文档,我不明白的一件事是为什么 "hello".delete("lo","l") 返回 "heo"。你知道它为什么会这样,因为我认为它应该返回“he”,因为它首先删除“lo”然后删除“l”?
    猜你喜欢
    • 2022-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-27
    • 2021-08-08
    • 2014-07-27
    • 2014-02-02
    • 1970-01-01
    相关资源
    最近更新 更多