2012-09-12 9 views
5

He estado aprendiendo C# por 2 meses. Antes, aprendí PHP y ver que tiene una matriz en donde el índice es una cadena, así:¿C tiene matriz con índice es una cadena como PHP?

$John["age"] = 21; 
$John["location"] = "Vietnam"; 

Es muy útil recordar lo que nos propusimos a un elemento de matriz. Traté de encontrar si C# es compatible con ese tipo de matriz, pero aún no he visto ninguna respuesta.

¿Tiene C# una matriz como esta? Si lo hace, ¿cómo puedo crearlo?

+4

FYI, esto se llama una matriz asociativa. – nickb

+1

http://msdn.microsoft.com/en-us/library/xfhwa508.aspx –

Respuesta

6

C# admite cualquier tipo de objeto para un índice. Una implementación horneada es System.Collections.Generic.Dictionary<T1,T2>. Se puede declarar una como esta:

Dictionary<string, string> myDictionary = new Dictionary<string, string>(); 
+7

No tiene que usar 'Add()' para agregar elementos; asignarlos como en la muestra de PHP también los agrega. – Lucero

+0

Gracias, Lucero voy a editar esa parte. –

5

Sí, esta es una matriz asociativa, representada en C# por la clase genérica Dictionary<TKey, TValue> o la Hashtable no genérica.

Su código solo sería posible con Hashmap ya que los valores no son del mismo tipo. Sin embargo, le sugiero que reconsidere ese diseño.

+1

+1 - me la ganaste :-p – Lucero

+0

¿Sería tan amable de comentar el motivo por el infractor? De lo contrario, el downvote no tiene sentido ya que no puedo mejorar la respuesta. –

+0

Hola, Daniel, técnicamente podrías lograrlo con 'Dictionary ', también. No obtiene nada útil, pero no necesita * un 'Hashmap' para ese requisito. –

4

Utilice un System.Collections.Generic.Dictionary<T1,T2> como otro dijo. Para completar su conocimiento, debe saber que puede controlar el comportamiento del []. Ejemplo:

public class MyClass 
{ 
    public string this[string someArg] 
    { 
     get { return "You called this with " + someArg; } 
    } 

} 

class Program 
{ 

    void Main() 
    { 
     MyClass x = new MyClass(); 
     Console.WriteLine(x["something"]); 
    } 
} 

Producirá "Ha llamado esto con algo".

Más sobre esto en la documentation

+0

Entonces la respuesta correcta es: ¡Ningún C# tiene una matriz asociativa! – JvdBerg

+2

@JvdBerg: tonterías. –

+0

No, no lo es. ¡Un diccionario es una clase, y no una matriz pasiva! – JvdBerg

Cuestiones relacionadas