metodos - Encontrar la diferencia entre las cadenas en Ruby
string to array ruby (4)
Necesito tomar dos cadenas, compararlas e imprimir la diferencia entre ellas.
Entonces digo que tengo:
teamOne = "Billy, Frankie, Stevie, John"
teamTwo = "Billy, Frankie, Stevie"
$ teamOne.eql? teamTwo
=> false
Quiero decir "Si las dos cadenas no son iguales, imprima lo que sea que sea diferente entre ellas. En este caso, solo estoy buscando imprimir" Juan ".
Primero debe ordenar para asegurarse de no restar una cadena más grande de una cadena más pequeña:
def compare(*params)
params.sort! {|x,y| y <=> x}
diff = params[0].split('', '') - params[1].split('', '')
if diff === []
true
else
diff
end
end
puts compare(a, b)
Si la cadena real que está comparando es similar a las cadenas que proporcionó, entonces debería funcionar:
teamOneArr = teamOne.split(", ") => ["Billy", "Frankie", Stevie", "John"] teamTwoArr = teamTwo.split(", ") => ["Billy", "Frankie", Stevie"] teamOneArr - teamTwoArr => ["John"]
solución fácil:
def compare(a, b)
diff = a.split('', '') - b.split('', '')
if diff === [] // a and b are the same
true
else
diff
end
end
por supuesto, esto solo funciona si sus cadenas contienen valores separados por comas, pero esto se puede ajustar a su situación.
Todas las soluciones hasta ahora ignoran el hecho de que la segunda matriz también puede tener elementos que la primera matriz no tiene. Chuck ha señalado una solución (ver comentarios en otras publicaciones), pero hay una solución más elegante si trabajas con conjuntos:
require ''set''
teamOne = "Billy, Frankie, Stevie, John"
teamTwo = "Billy, Frankie, Stevie, Zach"
teamOneSet = teamOne.split('', '').to_set
teamTwoSet = teamTwo.split('', '').to_set
teamOneSet ^ teamTwoSet # => #<Set: {"John", "Zach"}>
Este conjunto se puede convertir a una matriz si es necesario.