scan metodos example array ruby string

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.