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

Ruby remove empty, nil arrays strings from array of strings

我有这个数组:

["[]", "[\"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- 删除所有空的 nil 元素
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"]

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

您可以使用 array.compactarray.reject(&:nil?)

删除 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 }

要仅删除 nil 元素,您可以对数组使用 compact 方法。 要同时删除 nil 和空字符串,可以使用 select 方法:

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

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

my_array.map! { |element| clever_string_parsing_on(element) }