我有这个数组数组:
["[]", "[\"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]
我怎么能:
1-删除所有空的零元素
2-有一个字符串数组:
["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"]
答案 0 :(得分:1)
首先,它是一个简单的字符串数组。
您可以使用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 }
答案 1 :(得分:0)
要删除nil元素,可以在数组上使用compact
方法。
要删除nil和空字符串,可以使用select
方法:
my_array.select! { |element| element&.size.to_i > 0 }
要处理剩余的字符串,您需要迭代每个字符串并确定它是否需要YAML解析。您将用于收集该迭代结果的方法是map
:
my_array.map! { |element| clever_string_parsing_on(element) }