¿Cómo comparar matrices? ¿Y cambiar atributos?

Soy un nuevo desarrollador de iOS, quiero comparar y cambiar atributos.

Matriz1 = (objeto1, objeto2, objeto3, objeto4) Matriz2 = (objeto2, objeto4, objeto5, objeto8)

Compare Array1 y Array2 Si los mismos objetos están en Array2, cambie los atributos en los objetos.

En este caso anterior, se deben cambiar Object2 y Object4.

¿¿Cómo debería hacer??

¡¡Por favor, ayúdame!!

preguntado el 01 de julio de 12 a las 06:07

3 Respuestas

Puedes usar conjuntos para esto

NSMutableSet *array1Set = [NSMutableSet setWithArray:array1];
NSSet *array2Set = [NSSet setWithArray:array2];
[array1Set intersectSet:array2Set];

Ahora tiene un conjunto con solo los objetos que están en ambas matrices. Ahora puedes usar enumerateObjectsUsingBlock: en el conjunto para manipular los objetos o convertir el conjunto nuevamente en una matriz NSArray *filteredArray = [array1Set allObjects]

Respondido 01 Jul 12, 09:07

Buena solución. Sería ligeramente interesante ver cómo se acumulan todos los métodos posibles, en cuanto al rendimiento. - jrturton

echar un vistazo, por ejemplo. aquí: ¿Cuándo es mejor usar un NSSet en lugar de un NSArray? - Pfitz

Puede usar la enumeración rápida para pasar a través de la matriz 2, luego use containsObject: para comprobar si pertenece a array1:

for (id object in array2)
{
    if ([array1 containsObject:object])
    {
        // change your settings here
    }

También puede crear una nueva matriz usando filteredArrayUsingPredicate:, u obtenga las rutas de índice de los objetos coincidentes usando indexesOfObjectsPassingTest:. No ha dicho cuántos objetos es probable que haya en su matriz, por lo que no sé si el rendimiento será un problema.

Respondido 01 Jul 12, 07:07

Creo que tendrás que hacer un n*n buscar en este caso. Recorra cada objeto en Array1, tenga un bucle anidado y compare cada elemento en Array2 con el objeto actual (en Array1). Si son iguales, cambia tu atributo.

for (int i = 0; i < [array1 count]; i++)
    for (int j = 0; j < [array2 count]; j++)
        if ([array1 objectAtIndex:i] == [array2 objectAtIndex:j]) {
            // do yo thangs
        }

Respondido 01 Jul 12, 06:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.