¿Cuál es la estructura de datos o tipo más confiable y rápida para almacenar datos usando Objective C?

Estoy buscando el tipo o estructura de datos para almacenar un gran número de primitivas del mismo tipo en mi aplicación (Mac OS X o iOS) usando el Objetivo C. Como entendí NSNumber almacena solo una primitiva (corrígeme si estoy equivocado). Tengo, digamos, miles de integers o cadenas. ¿Cuál sería la mejor solución para colocar, almacenar y acceder allí? NSSet, NSArray, NSMutableArray, NSDictionary, NSMutableDictionary o algo más? Sé que tienen diferentes características, pero básicamente me importa solo el performance de las operaciones básicas (poner, almacenar, recuperar).

Solo depende de cómo desea AGREGAR, GUARDAR y RETIRAR estos datos.

Primero, analicemos cada tipo de estructura de datos disponible en Objective-C:

Matriz primitiva

Este es el tipo de almacenamiento más básico en Objective-C (o C) que se usa para almacenar primitivas. Ej: int a[4] = {1, 2, 3, 4}; La limitación a esto es

  • Solo puede almacenar types primitivos.
  • El tamaño de la matriz no se puede cambiar una vez declarado.
  • Solo puede ser recuperado por el índice.
  • Puede almacenar solo un tipo de datos, definidos al momento de declarar la matriz.

NSArray

Este es un contenedor para almacenar objects. Cualquier object que sea del tipo NSObject (o henetworkinga de NSObject ) o sea del tipo 'id' se puede almacenar en NSArray .

  • Una vez inicializado, no puede ser mutado, es decir, el tamaño de la matriz no se puede cambiar ni los objects que contiene pueden modificarse. Esto es bueno en términos de security.
  • Solo se puede acceder a los objects por su índice.

NSMutableArray

Igual que NSArray , pero

  • Puede ser mutado, es decir, los objects existentes se pueden modificar y también se pueden agregar o eliminar nuevos objects.

NSSet

Igual que NSArray pero

  • Almacena solo objects únicos.
  • No se puede acceder a los objects por su índice. Los objects solo se pueden acceder mediante enumeración.

NSMutableSet

Igual que NSSet , pero

  • Puede ser mutado, es decir, los objects pueden agregarse o eliminarse en un momento posterior.

NSOrdenetworkingSet

Igual que NSArray , es decir, los objects son almacenados y recuperados por un índice, pero

  • Almacena solo objects únicos.

NSMutableOrdenetworkingSet

Igual que NSMutableArray , pero

  • Almacena solo objects únicos.

NSDictionary

Puede almacenar cualquier tipo de datos.

  • Los objects se almacenan y se recuperan mediante una tecla.
  • Una vez inicializado, no puede ser mutado, es decir, no puede agregar nuevos valores-key ni puede actualizar los objects existentes asociados a una key en particular.

NSMutableDictionary

Igual que NSDictionary

  • Puede ser mutado, es decir, se pueden agregar o eliminar nuevos objects y se pueden modificar los objects existentes.

Esta fue una breve descripción sobre las estructuras de datos más utilizadas en Objective-C. Estos se utilizan en function de la necesidad del progtwig y de cómo se manipularán los datos.

Por lo tanto,

  • Si desea almacenar miles de numbers y cadenas y desea acceder a él por su valor de índice, utilice NSMutableArray . Si no va a agregar, eliminar o modificar ningún object en el futuro, entonces use NSArray .
  • Si desea almacenar datos pero no quiere duplicates y desea acceder a él por su índice, use NSOrdenetworkingSet / NSMutableOrdenetworkingSet
  • Si desea almacenar datos pero no quiere duplicates y su pedido tampoco importa, use NSSet / NSMutableSet .
  • Si desea acceder a los datos mediante una key particular, utilice NSDictionary / NSMutableDictionary

Con respecto al performance

  • Como NSSet no contiene ningún order, son más NSArray que NSArray
  • Aquí hay un artículo muy bueno y detallado sobre las características de desempeño para cada estructura de datos discutida anteriormente

     Class Time [ms] 1,000,000 elements 

    Agregando

     NSMutableOrdenetworkingSet 3190.52 NSMutableDictionary 2522.47 NSMutableSet 2511.96 NSMutableArray 1423.26 NSSet 8.03 

    Acceso aleatorio

     NSMutableOrdenetworkingSet 10.74 NSMutableDictionary 9.18 NSMutableArray 8.08 NSMutableSet 4.47 NSSet 3.56 

Para saber más sobre los types de datos Objective-C y la estructura de datos, lee esto