ruby快速字符串子集分析

ruby快速字符串子集分析,ruby,Ruby,我有两条线: "0123" "023" 我希望能够显示“0123”中存在“0”、“2”和“3”,我已经尝试了字符串上的数组、集合和子字符串方法,但没有效果 有什么方法可以有效地做到这一点吗?我把这两个字符串分别看作数组和集合,然后试图找出它们之间的区别。 但是你不想要差异,你想要相似,这就是为什么位于 然后可以进一步细化,使其更具可读性 first_string = "0123".split("") second_string = "023".split("") first_string.r

我有两条线:

"0123"
"023"
我希望能够显示“0123”中存在“0”、“2”和“3”,我已经尝试了字符串上的数组、集合和子字符串方法,但没有效果


有什么方法可以有效地做到这一点吗?

我把这两个字符串分别看作数组和集合,然后试图找出它们之间的区别。 但是你不想要差异,你想要相似,这就是为什么
位于

然后可以进一步细化,使其更具可读性

first_string = "0123".split("")
second_string = "023".split("")

first_string.reject{ |x| !second_string.include?(x) }
最后,如果你想要更像红宝石的东西,你可以用


可以使用数组交集():

这很好用

matches = []
"023".each_char { |c| matches << c if "0123".index(c) }

p matches # Output ["0", "2", "3"]
匹配=[]

“023”.each_char{| c | matches通过迭代所需字符串的每个字节值并检查要检查的字符串中是否存在字符值,将结果连接到字符串并将其与所需字符串进行比较以返回true或false,返回一个字符串中是否存在一个字符串的所有字符

to_check = '0123'
to_check2 = '9123'
needed = '023'

p needed.each_byte.map{|c|to_check[c.chr]}.join == needed #true
p needed.each_byte.map{|c|to_check2[c.chr]}.join == needed #false

谢谢,我成功地做到了:如果a.split(“”)。拒绝{x |!“{b}”。split(“”)。include?(x)}。join==b…endI选择了这个答案,因为它看起来更有效。我建议使用
chars
而不是
split(“”)
,因为它更清晰、更快。
a = '0123'.chars
b = '023'.chars

intersections = a & b
matches = []
"023".each_char { |c| matches << c if "0123".index(c) }

p matches # Output ["0", "2", "3"]
to_check = '0123'
to_check2 = '9123'
needed = '023'

p needed.each_byte.map{|c|to_check[c.chr]}.join == needed #true
p needed.each_byte.map{|c|to_check2[c.chr]}.join == needed #false