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.compact
或 array.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) }
我有这个数组:
["[]", "[\"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.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 }
要仅删除 nil 元素,您可以对数组使用 compact
方法。
要同时删除 nil 和空字符串,可以使用 select
方法:
my_array.select! { |element| element&.size.to_i > 0 }
要处理剩余的字符串,您需要遍历每个字符串并确定它是否需要 YAML 解析。您将用于收集该迭代结果的方法是 map
:
my_array.map! { |element| clever_string_parsing_on(element) }