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

时间:2017-10-31 15:23:32

标签: arrays ruby ruby-on-rails-3

我有这个数组数组:

["[]", "[\"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"]

2 个答案:

答案 0 :(得分:1)

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

您可以使用array.compactarray.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) }