matriz bidimensionales arreglos ruby arrays array-difference

bidimensionales - arreglos en ruby



Restando una matriz de otra en Ruby (2)

La solución anterior

a - b

elimina todas las instancias de elementos en la matriz b de la matriz a .

[ 1, 1, 2, 2, 3, 3, 4, 5 ] - [ 1, 2, 4 ] #=> [ 3, 3, 5 ]

En algunos casos, quiere que el resultado sea [1, 2, 3, 3, 5] . Es decir, no desea eliminar todos los duplicados, sino solo los elementos individualmente.

Usted podría lograr esto por

class Array def delete_elements_in(ary) ary.each do |x| if index = index(x) delete_at(index) end end end end

prueba

irb(main):198:0> a = [ 1, 1, 2, 2, 3, 3, 4, 5 ] => [1, 1, 2, 2, 3, 3, 4, 5] irb(main):199:0> b = [ 1, 2, 4 ] => [1, 2, 4] irb(main):200:0> a.delete_elements_in(b) => [1, 2, 4] irb(main):201:0> a => [1, 2, 3, 3, 5]

El código funciona incluso cuando las dos matrices no están ordenadas. En el ejemplo, las matrices están ordenadas, pero esto no es obligatorio.

Tengo dos matrices de Tareas: creadas y asignadas. Quiero eliminar todas las tareas asignadas de la matriz de tareas creadas. Aquí está mi código de trabajo, pero desordenado:

@assigned_tasks = @user.assigned_tasks @created_tasks = @user.created_tasks #Do not show created tasks assigned to self @created_not_doing_tasks = Array.new @created_tasks.each do |task| unless @assigned_tasks.include?(task) @created_not_doing_tasks << task end end

Estoy seguro de que hay una mejor manera. ¿Qué es? Gracias :-)


Puedes restar matrices en Ruby:

[1,2,3,4,5] - [1,3,4] #=> [2,5]

ary - other_ary → new_ary Diferencia de matriz

Devuelve una nueva matriz que es una copia de la matriz original, eliminando los elementos que también aparecen en other_ary. El orden se preserva de la matriz original.

¿Compara elementos usando su hash y eql? métodos para la eficiencia.

[ 1, 1, 2, 2, 3, 3, 4, 5 ] - [ 1, 2, 4 ] #=> [ 3, 3, 5 ]

Si necesita un comportamiento parecido a un set, consulte la clase de biblioteca Set.

Ver la documentación de Array .