Как создать многомерный список массивов в С#?
Возможно ли создать многомерный arraylist в С#?
StartDate Qty size
9/1/2010 10 15
9/1/2009 12 17
9/1/2008 11 19
StartDate
, Qty
и size
- 3 arraylists. Мне нужно иметь их в одном арраисте. Мне также нужно было бы отсортировать этот arraylist StartDate
. Это возможно? Есть ли лучший способ сделать это, кроме arraylist?
Ответы
Ответ 1
Вы можете сделать это так, да. Но в этом случае, поскольку каждая строка кажется связанной, почему бы не создать класс для хранения данных:
public class Info
{
public DateTime StartDate { get; set; }
public int Qty { get; set; }
public int Size { get; set; }
}
А затем просто иметь обычный список для хранения объектов:
List<Info> infoList = new List<Info>();
Это избавит вас от необходимости беспокоиться о заказе каждого списка. Чтобы обрабатывать порядок, вы можете использовать методы LINQ to Objects Extension:
var sortedList = infoList.OrderBy(i => i.StartDate);
Ответ 2
Когда сможешь, иди с ответом Джастина. Это сэкономит головные боли в долгосрочной перспективе, потому что каждое свойство имеет смысл. Если вам нужен быстрый подход, и у вас есть .NET 4, вы можете перечислить Tuple
в списке. Например,
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;
Если у вас нет .NET 4, тривиально реализовать собственный кортеж. Однако, если вы собираетесь это сделать, можете также пропустить назад и вернуться с ответом Джастина.
Изменить. Для полноты здесь используются параметры сортировки с использованием этого подхода.
// 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);
Ответ 3
Вам нужен список списков. Нет причин использовать ArrayList. В вашем примере:
List<List<DateTime>> list = new List<List<DateTime>>();
Тем не менее, я предпочитаю что-то вроде Джастина, показанного выше.
Ответ 4
Если эти свойства описывают сущность или "строку данных", вы можете подумать о создании класса:
public class MyClass
{
public DateTime StartDate {get;set;}
public int Qty {get;set;}
public int Size {get;set;}
}
Затем вы можете создать массив этих объектов:
List<MyClass> myClassArray = new List<MyClass>();
Ответ 5
Вы можете использовать SortedList<>
и добавить к нему объект с тремя экземплярами List<>
. Затем вам нужно написать сравнитель для сортировки объектов StartDate
Ответ 6
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