【问题标题】:Ruby map nested arrayRuby 映射嵌套数组
【发布时间】:2013-03-21 18:27:07
【问题描述】:

我正在尝试将这个字符串拆分为嵌套数组:

x = '{type:paragaph|class:red|content:[class:intro|body:This is the introduction paragraph.][body:This is the second paragraph.]}'
x << '{type:image|class:grid|content:[id:1|title:image1][id:2|title:image2][id:3|title:image3]}'

到目前为止:

x.scan(/\{(.*?)\}/).map {|m| m[0].split(/\|\s*(?=[^\[\]]*(?:\[|$))/)}

成功划分为:

[
  ["type:paragaph", "class:red", "content:[class:intro|body:This is the introduction paragraph.][body:This is the second paragraph.]"],
  ["type:image", "class:grid", "content:[id:1|title:image1][id:2|title:image2][id:3|title:image3]"]
]

我正在尝试添加额外的地图:

x.scan(/\{(.*?)\}/).map {|m| m[0].split(/\|\s*(?=[^\[\]]*(?:\[|$))/)}.map {|m| m[0].split(/\:\s*(?=[^\[\]]*(?:\[|$))/)}

返回:

[["type", "paragaph"], ["type", "image"]] 

然而我却在追求这个:

[
  [['type','paragaph'], ['class','red'], ['content',['[class:intro|body:This is the introduction paragraph.][body:This is the second paragraph.]']],
  [['type','image'], ['class','grid'], ['content','[id:1|title:image1][id:2|title:image2][id:3|title:image3]']]
]

地图似乎将自身应用于整个 2 级数组,而不是其中的每个元素。我在这里做错了什么?

【问题讨论】:

    标签: ruby regex arrays map


    【解决方案1】:

    在第二张地图中,您只拆分第一个元素,而不是使用地图拆分每个元素

    x.scan(/\{(.*?)\}/).map {|m| m[0].split(/\|\s*(?=[^\[\]]*(?:\[|$))/)}.map {|m| m.map {|n| n.split(/\:\s*(?=[^\[\]]*(?:\[|$))/)}}
    

    您还可以将正则表达式提取到变量中进行一些清理

    regex = /\|\s*(?=[^\[\]]*(?:\[|$))/
    
    x.scan(/\{(.*?)\}/).map {|m| m[0].split(regex)}.map {|m| m.map {|n| n.split(regex)}}
    

    【讨论】:

      猜你喜欢
      • 2019-08-13
      • 1970-01-01
      • 1970-01-01
      • 2013-07-17
      • 2013-08-08
      • 2016-04-10
      • 2021-05-27
      • 2020-09-25
      • 2021-02-08
      相关资源
      最近更新 更多