Подтвердить что ты не робот

Как создать многомерный список массивов в С#?

Возможно ли создать многомерный 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?

4b9b3361

Ответ 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