2010-09-28 37 views
11

是否有可能在C#中創建多維數組列表?如何在c#中創建多維數組列表?

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

StartDateQtysize是3周的ArrayLists。我需要讓他們在一個單一的列表中。我還需要通過StartDate對這個數組列表進行排序。這可能嗎?除了數組列表之外,還有更好的方法嗎?

回答

30

你可以這樣做,是的。但在這種情況下,由於各行似乎有關,爲什麼不創建一個類來保存數據:

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擴展方法:

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

蕩吧...打我給它。 :-p(+ 1,因爲手指比我快。) – JasCav 2010-09-28 18:36:43

+0

按Startdate排序:var sortedList = infoList.OrderBy(x => x.StartDate) – HitLikeAHammer 2010-09-28 18:40:08

+0

顯然它是按降序排列的,所以你應該使用'OrderByDescending() '。 – 2010-09-28 18:52:02

1

您想要列表的列表。沒有理由使用ArrayList。從你的例子:

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

這就是說,我喜歡像賈斯汀上面顯示的東西。

1

如果這些屬性描述一個實體或「數據行」,則可以考慮創建一個類:

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

然後,您可以創建這些對象的數組:

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

你可以使用一個SortedList<>並添加了一個對象,其中包含3個List<>實例。然後你需要寫一個比較器來排序你的對象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,實現您自己的元組是微不足道的。但是,如果你打算這樣做,不妨跳回頂端並與Justin的答案一起去。

編輯爲了完整起見,以下是使用此方法的排序選項。

// 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

如果我們要吹噓.NET 4 ......爲什麼不使用'var myData = ...'? – WernerCD 2010-09-28 18:47:17

+1

我不特別喜歡'var',並且通常只在處理查詢時使用它(有時甚至沒有)。對於其他所有情況,我寧願在任何時候都明確表示。 – 2010-09-28 18:59:19

+0

據我所知,在某些情況下,明確更好...猜測它的只是首選,沒有必要輸入列表>兩次 - 每次一個=。 – WernerCD 2010-09-28 19:04:02

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

可彎曲結構!收集你的女人和孩子,讓他們安全! – 2010-09-28 19:34:01

+0

@Anthony Pegram:我認爲這是一種優化,它會提高排序操作的性能。如我錯了請糾正我。 – syntaxcheck 2010-09-28 20:06:32

+0

我不知道結構與類在排序情況下的表現,除了說測試它,並在各種情況下看到,所有這些我都無法進入。但是我的評論指的是可變結構被認爲是邪惡的事實。看到這個問題,答案和鏈接的博客文章等,瞭解更多。 http://stackoverflow.com/questions/441309/why-are-mutable-structs-evil – 2010-09-28 20:51:49