我试图比较两个包含“/”元素的数组,意思是“或”。生成的Array_3应该由Array_2中的Array_1元素组成。
Array_1 = ["A", "B", "C/D"]
Array_2 = ["B/Z", "C/D/E"]
上述情况的Array_3应为[B,C / D],因为B是B / Z(B或Z)的一部分,而C / D(C或D)是C / D / E的一部分(C或D或E)。
Array_3 = Array_1&在这种情况下,Array_2显然不起作用。此外,.split(“/”)不起作用,因为带有“/”的元素会被分解 - 我想保留原始元素“/".
答案 0 :(得分:2)
您可以拆分Array_2
个字符串并将它们放在一个集合中。您只需迭代Array_1
的每个元素,查看set_2
中是否包含任何字符串:
Array_1 = ["A", "B", "C/D"]
Array_2 = ["B/Z", "C/D/E"]
require 'set'
set_2 = Array_2.flat_map { |s| s.split('/') }.to_set
# <Set: {"B", "Z", "C", "D", "E"}>
p Array_1.select { |s| s.split('/').any? { |letter| set_2.include?(letter) } }
# ["B", "C/D"]
使用Set
只是因为Set#include?
比Array#include?
快得多,include?
被多次使用。