Estoy buscando una clase en Objective C similar a KeyValuePair de C# (incluso sin los genéricos). Cualquier cosa que tenga un primer/segundo objeto. Puedo crear el mío sin ningún problema, pero creo que si uno ya está allí, entonces no hay necesidad de reinventar la rueda. No he tenido suerte para encontrar uno ... ¿Alguien sabe de uno?Objetivo C - Clase KeyValuePair?
Respuesta
Así que básicamente como un hashmap, ¿verdad?
Ejemplo de here:
NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];
// Add objects to a dictionary indexed by keys
[dictionary setObject:@"A Book about the Letter A" forKey:@"A"];
[dictionary setObject:@"A Book about the Letter B" forKey:@"B"];
[dictionary setObject:@"A Book about the Letter C" forKey:@"C"];
// Retrieve an object from a dictionary with a key
NSLog([dictionary objectForKey:@"B"]);
// Release a dictionary
[dictionary release];
¿Qué pasa con el uso de estructuras de civil C? Es "más rápido" que escribir una clase completa.
typedef struct KeyValuePair {
const char *key;
const char *value;
} KeyValuePair;
//init like this
KeyValuePair kvp = {"yourkey", "yourvalue"}
cosas a tener en cuenta:
- Las estructuras se pasan por valor.
- ARC evita el uso de objetos ObjC con estructuras pero las primitivas C aún son compatibles.
- No puede agregar estructuras a las clases de colección ObjC (NSArray, NSDictionary, etc.).
Desafortunadamente C struct no funciona bien con ARC y no se puede poner en NSArray/NSDictionary y en muchos otros lugares. es casi inútil –
@BryanChen cierto, pero si necesita algún tipo de contenedor para pasar sin tener que crear una clase completa, las estructuras pueden seguir siendo útiles. ARC evita el uso de objetos ObjC con estructuras, pero las primitivas C aún son compatibles. –
en realidad lo está haciendo en más forma C/C++ en lugar de forma ObjC. –
¿Qué tal un simple NSArray?
NSArray* kvp = [NSArray arrayWithObjects: key, value, nil];
// or, using boxed literals,
NSArray* kvp = @[key, value];
...
NSObject* key = [kvp firstObject];
NSObject* value = [kvp lastObject];
Se podría hacer una función para envolver +arrayWithObjects:
(y manejar el caso de una clave nula o valor que pudieran tropezar con el enfoque simple)
Acceso a los elementos de un NSArray será probablemente más rápido que una NSDiccionario.
- 1. objetivo c constantes clase
- 2. tipo Clase C Objetivo
- 3. Objetivo C ¿Clase o estructura?
- 4. c + + clase con objetivo-c amigo
- 5. Convertir Lista de KeyValuePair en IDictionary "C#"
- 6. KeyValuePair VS DictionaryEntry
- 7. Ajuste del objetivo C en el objetivo C++/C++
- 8. KeyValuePair en Java
- 9. Constante en objetivo-c
- 10. objetivo-c - variables globales
- 11. Objetivo-C - Símbolos indefinidos
- 12. variables de clase objetivo-c: ¿cuándo se llama a dealloc?
- 13. Objetivo-C: acceder a propiedades privadas en una clase heredada
- 14. objetivo-c método init predeterminado para la clase?
- 15. Alternativas de modelado de clase para el objetivo C
- 16. ¿Crear instancia de clase objetivo-c por nombre?
- 17. Objetivo C - ¿Cómo agregar un método a una clase existente?
- 18. KeyValuePair vs. NameValueCollection
- 19. Inicializando una matriz KeyValuePair
- 20. KeyValuePair: ¿ningún constructor sin parámetros?
- 21. Objetivo C - Subclase de NSArray
- 22. Mezcla C y objetivo-C
- 23. Objetivo C NSStack y NSQueue?
- 24. constructor en el objetivo c
- 25. implementación Blowfish objetivo-c
- 26. Objetivo XOR-c
- 27. Objetivo C: SHA1
- 28. C Objetivo: Modulo sesgo
- 29. Objetivo C Boolean Array
- 30. ¿Cacao u objetivo C?
Me gusta esto, pero solo una instancia (hashmap/dictionary contiene varias claves/valores). Estoy buscando una clase que sea solo una clave/valor. – Kyle
Puede considerar la creación de su propia clase de "par". Alternativamente, podría subclase NSMutableDictionary y aplicar una regla de solo un par de objetos en su diccionario subclasificado a la vez. Parece extraño que no exista algún tipo de objeto "NSPair" estándar ... – PixelCloudSt