代码之家  ›  专栏  ›  技术社区  ›  mamesaye

Ruby从字符串数组中删除空的nil数组字符串

  •  0
  • mamesaye  · 技术社区  · 8 年前

    我有一个数组:

    ["[]", "[\"https://somewebsite1.com\"]", "[\"https://somewebsite2.com\"]", "[]", "[]", "[]", "---\n- https://somewebsite3.com\n", "--- []\n", "---\n- https://somewebsite4.com\n", "--- []\n", "--- []\n", "---\n- https://somewebsite.com\n", "---\n- https://somewebsite5.com\n", nil, nil, nil, nil, nil]      
    

    我怎样才能:

    ["https://somewebsite1.com", "https://somewebsite2.com", "https://somewebsite3.com", "https://somewebsite4.com", "https://somewebsite.com", "https://somewebsite5.com"]
    

    array.select &:present? 去除 nil
    然后 array.delete_if {|i| i == '[]'} 去除 []
    所以我只剩下:

    ["[\"https://somewebsite1.com\"]", "[\"https://somewebsite2.com\"]",  "---\n- https://somewebsite3.com\n", "--- []\n", "---\n- https://somewebsite4.com\n", "--- []\n", "--- []\n", "---\n- https://somewebsite.com\n", "---\n- https://somewebsite5.com\n"]
    
    2 回复  |  直到 8 年前
        1
  •  3
  •   Stanislav Mekhonoshin    8 年前

    首先,它是一个简单的字符串数组。

    可以使用删除nil元素 array.compact array.reject(&:nil?)

    要删除空的yaml条目,可以使用反序列化

    array.compact .reject { |i| YAML.parse(i).children.first.children.empty? } .map { |i| i.gsub('["', '').gsub('"]', '').gsub("---\n- ", '').strip }

    所以输出是你说的。

    更新:

    另一种方法,没有字符串操作

    res = a.compact
    deserialized = res.map { |i| YAML.parse(i) }
    res = deserialized.reject { |i| i.children.first.children.empty? }
    res.map { |i| i.children.first.children.first.value }
    
        2
  •  1
  •   Mark Tabler    8 年前

    要只删除nil元素,可以使用 compact 方法。 要删除nil和空字符串,可以使用 select 方法:

    my_array.select! { |element| element&.size.to_i > 0 }
    

    要处理剩余的字符串,您需要迭代每个字符串,并确定它是否需要YAML解析。用于收集该迭代结果的方法是 map :

    my_array.map! { |element| clever_string_parsing_on(element) }
    
    推荐文章