2010-09-28 21 views
11

¿Es posible crear una lista de arrays multidimensional en C#?¿Cómo creo una lista de matriz multidimensional en C#?

StartDate Qty size 
9/1/2010 10  15 
9/1/2009 12  17 
9/1/2008 11  19 

StartDate, Qty y size son los 3 ArrayLists. Necesito tenerlos en una sola lista de arrays. También necesitaría ordenar esta lista de arrays por StartDate. es posible? ¿Hay una mejor manera de hacerlo que no sea el arraylist?

Respuesta

30

Puede hacerlo de esa manera, sí. Pero en este caso, ya que cada fila parece estar relacionado, por qué no crear una clase para contener los datos:

public class Info 
{ 
    public DateTime StartDate { get; set; } 
    public int Qty { get; set; } 
    public int Size { get; set; } 
} 

Y a continuación, sólo tiene una lista regular para mantener los objetos:

List<Info> infoList = new List<Info>(); 

que le ahorrará de tener que preocuparse por el orden de cada lista. Para gestionar el pedido, puede utilizar los métodos de extensión LINQ to Objects:

var sortedList = infoList.OrderBy(i => i.StartDate); 
+0

Dang ... se me adelantó. :-p (+1 por tener dedos más rápidos que yo.) – JasCav

+0

Para ordenar esto por Startdate: var sortedList = infoList.OrderBy (x => x.StartDate) – HitLikeAHammer

+0

Aparentemente está en orden descendente, por lo que debería estar utilizando 'OrderByDescending() '. –

1

Quiere una lista de todas las listas. No hay razón para usar ArrayList tampoco. De su ejemplo:

List<List<DateTime>> list = new List<List<DateTime>>(); 

Dicho esto, prefiero algo como Justin ha demostrado anteriormente.

1

Si estas propiedades describen una entidad o "fila de datos", usted podría considerar la creación de una clase:

public class MyClass 
{ 
    public DateTime StartDate {get;set;} 
    public int Qty {get;set;} 
    public int Size {get;set;} 
} 

A continuación, puede crear una matriz de estos objetos:

List<MyClass> myClassArray = new List<MyClass>(); 
0

Usted podría utilizar a SortedList<> y tiene un objeto agregado que tiene las 3 List<> instancias. Luego necesita escribir un comparador para ordenar sus objetos por StartDate

2

Cuando pueda, vaya con la respuesta de Justin. Ahorrará dolores de cabeza a largo plazo porque cada propiedad tiene un significado. Si necesita un enfoque rápido y tiene .NET 4, puede incluir el Tuple en una lista. Como

List<Tuple<DateTime, int, int>> myData = new List<Tuple<DateTime, int, int>>(); 
myData.Add(new Tuple<DateTime, int, int>(DateTime.Now, 1, 2)); 

// 

DateTime myDate = myData[0].Item1; 
int myQty = myData[0].Item2; 
int mySize = myData[0].Item3; 

Si no tiene .NET 4, es trivial implementar su propia tupla. Sin embargo, si vas a hacer eso, también puedes saltarte a la parte superior e ir con la respuesta de Justin.

Editar Para completar, aquí están las opciones de clasificación con este enfoque.

// descending sort done in place using List<>.Sort 
myData.Sort((t1, t2) => -1 * t1.Item1.CompareTo(t2.Item1)); 

// descending sort performed as necessary in a sequence 
var orderedList = myData.OrderByDescending(t => t.Item1); 
+0

Si vamos a presumir de .NET 4 ... ¿por qué no usarías 'var myData = ...'? – WernerCD

+1

No me gusta especialmente 'var' y generalmente solo lo uso cuando se trata de consultas (y algunas veces ni siquiera entonces). Por todo lo demás, prefiero ser explícito en todo momento. –

+0

Entiendo que, en algunos casos, lo explícito es mejor ... Supongo que es solo una preferencia que no haya necesidad de escribir la Lista > dos veces, una a cada lado de =. – WernerCD

0
public struct MyStruct 
{ 
    public DateTime StartDate { get; set; } 
    public int Qty { get; set; } 
    public int Size { get; set; } 
} 
... 
List<MyStruct> MyList = new List<MyStruct>(); 
... 
MyList.Sort((item1, item2) => item1.Qty.CompareTo(item2.Qty)); //ascending sort 
... 
MyList.Sort((item1, item2) => item2.Qty.CompareTo(item1.Qty)); //descending sort 
+1

MUTABLE STRUCT! ¡Reúne a tus mujeres y niños y ponlos a salvo! –

+0

@ Antony Pegram: creo que esto es una optimización y aumentará el rendimiento en las acciones de clasificación. Corrígeme si estoy equivocado. – syntaxcheck

+0

No tengo idea sobre el rendimiento de la estructura frente a la clase en una situación de clasificación, excepto para probarla y verla en varios escenarios, a todos los cuales no puedo acceder. Pero mi comentario se refiere al hecho de que las estructuras mutables son rotundamente consideradas malvadas. Consulte esta pregunta y las respuestas y las publicaciones de blog vinculadas, etc., para obtener más información al respecto. http://stackoverflow.com/questions/441309/why-are-mutable-structs-evil –

Cuestiones relacionadas