sirve - matrices multidimensionales c#
Todas las sintaxis de inicialización de matriz posibles (13)
¿Cuáles son todas las sintaxis de inicialización de matrices que son posibles con C #?
Arreglos no vacíos
var data0 = new int[3]
var data1 = new int[3] { 1, 2, 3 }
var data2 = new int[] { 1, 2, 3 }
var data3 = new[] { 1, 2, 3 }
var data4 = { 1, 2, 3 }
no es compilable. Useint[] data5 = { 1, 2, 3 }
lugar.
Arreglos vacíos
-
var data6 = new int[0]
-
var data7 = new int[] { }
var data8 = new [] { }
yint[] data9 = new [] { }
no son compilables.var data10 = { }
no es compilable. Useint[] data11 = { }
lugar.
Como argumento de un método.
Solo las expresiones que pueden asignarse con la palabra clave var
pueden pasarse como argumentos.
-
Foo(new int[2])
-
Foo(new int[2] { 1, 2 })
-
Foo(new int[] { 1, 2 })
-
Foo(new[] { 1, 2 })
-
Foo({ 1, 2 })
no es compilable -
Foo(new int[0])
-
Foo(new int[] { })
-
Foo({})
no es compilable
Ejemplo para crear una matriz de una clase personalizada
A continuación se muestra la definición de la clase.
public class DummyUser
{
public string email { get; set; }
public string language { get; set; }
}
Así es como puedes inicializar la matriz:
private DummyUser[] arrDummyUser = new DummyUser[]
{
new DummyUser{
email = "[email protected]",
language = "English"
},
new DummyUser{
email = "[email protected]",
language = "Spanish"
}
};
En caso de que desee inicializar una matriz fija de elementos preinicializados iguales (no null
o que no sean los default
), use esto:
var array = Enumerable.Repeat(string.Empty, 37).ToArray();
También por favor participe en this discusión.
Estos son los métodos actuales de declaración e inicialización para una matriz simple.
string[] array = new string[2]; // creates array of length 2, default values
string[] array = new string[] { "A", "B" }; // creates populated array of length 2
string[] array = { "A" , "B" }; // creates populated array of length 2
string[] array = new[] { "A", "B" }; // created populated array of length 2
Tenga en cuenta que existen otras técnicas para obtener matrices, como las ToArray()
Linq ToArray()
en IEnumerable<T>
.
También tenga en cuenta que en las declaraciones anteriores, los dos primeros podrían reemplazar la string[]
de la izquierda con var
(C # 3+), ya que la información de la derecha es suficiente para inferir el tipo adecuado. La tercera línea debe escribirse como se muestra, ya que la sintaxis de inicialización de la matriz por sí sola no es suficiente para satisfacer las demandas del compilador. El cuarto también podría usar la inferencia. Entonces, si te gusta la brevedad, lo anterior podría escribirse como
var array = new string[2]; // creates array of length 2, default values
var array = new string[] { "A", "B" }; // creates populated array of length 2
string[] array = { "A" , "B" }; // creates populated array of length 2
var array = new[] { "A", "B" }; // created populated array of length 2
Las sintaxis de creación de matrices en C # que son expresiones son:
new int[3]
new int[3] { 10, 20, 30 }
new int[] { 10, 20, 30 }
new[] { 10, 20, 30 }
En el primero, el tamaño puede ser cualquier valor integral no negativo y los elementos de la matriz se inicializan a los valores predeterminados.
En el segundo, el tamaño debe ser una constante y el número de elementos dados debe coincidir. Debe haber una conversión implícita de los elementos dados al tipo de elemento de matriz dado.
En el tercero, los elementos deben ser convertibles implícitamente al tipo de elemento, y el tamaño se determina a partir del número de elementos dados.
En la cuarta, el tipo del elemento de la matriz se deduce calculando el mejor tipo, si existe, de todos los elementos dados que tienen tipos. Todos los elementos deben ser convertibles implícitamente a ese tipo. El tamaño se determina a partir del número de elementos dados. Esta sintaxis fue introducida en C # 3.0.
También hay una sintaxis que solo se puede utilizar en una declaración:
int[] x = { 10, 20, 30 };
Los elementos deben ser convertibles implícitamente al tipo de elemento. El tamaño se determina a partir del número de elementos dados.
no hay una guía todo en uno
Lo remito a la especificación C # 4.0, sección 7.6.10.4 "Expresiones de creación de matrices".
Otra forma de crear e inicializar una matriz de objetos. Esto es similar al ejemplo que @Amol ha publicado anteriormente , excepto que este utiliza constructores. Una pincelada de polimorfismo esparcida, no pude resistirme.
IUser[] userArray = new IUser[]
{
new DummyUser("[email protected]", "Gibberish"),
new SmartyUser("[email protected]", "Italian", "Engineer")
};
Clases por contexto:
interface IUser
{
string EMail { get; } // immutable, so get only an no set
string Language { get; }
}
public class DummyUser : IUser
{
public DummyUser(string email, string language)
{
m_email = email;
m_language = language;
}
private string m_email;
public string EMail
{
get { return m_email; }
}
private string m_language;
public string Language
{
get { return m_language; }
}
}
public class SmartyUser : IUser
{
public SmartyUser(string email, string language, string occupation)
{
m_email = email;
m_language = language;
m_occupation = occupation;
}
private string m_email;
public string EMail
{
get { return m_email; }
}
private string m_language;
public string Language
{
get { return m_language; }
}
private string m_occupation;
}
Repita sin LINQ :
float[] floats = System.Array.ConvertAll(new float[16], v => 1.0f);
Solución trivial con expresiones. Tenga en cuenta que con NewArrayInit puede crear una matriz unidimensional.
NewArrayExpression expr = Expression.NewArrayInit(typeof(int), new[] { Expression.Constant(2), Expression.Constant(3) });
int[] array = Expression.Lambda<Func<int[]>>(expr).Compile()(); // compile and call callback
También puede crear matrices dinámicas, es decir, primero puede pedirle al usuario el tamaño de la matriz antes de crearla.
Console.Write("Enter size of array");
int n = Convert.ToInt16(Console.ReadLine());
int[] dynamicSizedArray= new int[n]; // Here we have created an array of size n
Console.WriteLine("Input Elements");
for(int i=0;i<n;i++)
{
dynamicSizedArray[i] = Convert.ToInt32(Console.ReadLine());
}
Console.WriteLine("Elements of array are :");
foreach (int i in dynamicSizedArray)
{
Console.WriteLine(i);
}
Console.ReadKey();
Enumerable.Repeat(String.Empty, count).ToArray()
Creará matriz de cadenas vacías repetidas veces ''contar''. En caso de que desee inicializar la matriz con el mismo valor de elemento predeterminado especial. Con cuidado con los tipos de referencia, todos los elementos referirán el mismo objeto.
For Class initialization:
var page1 = new Class1();
var page2 = new Class2();
var pages = new UIViewController[] { page1, page2 };
int[] array = new int[4];
array[0] = 10;
array[1] = 20;
array[2] = 30;
o
string[] week = new string[] {"Sunday","Monday","Tuesday"};
o
string[] array = { "Sunday" , "Monday" };
y en matriz multidimensional
Dim i, j As Integer
Dim strArr(1, 2) As String
strArr(0, 0) = "First (0,0)"
strArr(0, 1) = "Second (0,1)"
strArr(1, 0) = "Third (1,0)"
strArr(1, 1) = "Fourth (1,1)"
var contacts = new[]
{
new
{
Name = " Eugene Zabokritski",
PhoneNumbers = new[] { "206-555-0108", "425-555-0001" }
},
new
{
Name = " Hanying Feng",
PhoneNumbers = new[] { "650-555-0199" }
}
};