是否有可能在C#中創建多維數組列表?如何在c#中創建多維數組列表?
StartDate Qty size
9/1/2010 10 15
9/1/2009 12 17
9/1/2008 11 19
StartDate
,Qty
和size
是3周的ArrayLists。我需要讓他們在一個單一的列表中。我還需要通過StartDate
對這個數組列表進行排序。這可能嗎?除了數組列表之外,還有更好的方法嗎?
是否有可能在C#中創建多維數組列表?如何在c#中創建多維數組列表?
StartDate Qty size
9/1/2010 10 15
9/1/2009 12 17
9/1/2008 11 19
StartDate
,Qty
和size
是3周的ArrayLists。我需要讓他們在一個單一的列表中。我還需要通過StartDate
對這個數組列表進行排序。這可能嗎?除了數組列表之外,還有更好的方法嗎?
你可以這樣做,是的。但在這種情況下,由於各行似乎有關,爲什麼不創建一個類來保存數據:
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);
您想要列表的列表。沒有理由使用ArrayList。從你的例子:
List<List<DateTime>> list = new List<List<DateTime>>();
這就是說,我喜歡像賈斯汀上面顯示的東西。
如果這些屬性描述一個實體或「數據行」,則可以考慮創建一個類:
public class MyClass
{
public DateTime StartDate {get;set;}
public int Qty {get;set;}
public int Size {get;set;}
}
然後,您可以創建這些對象的數組:
List<MyClass> myClassArray = new List<MyClass>();
你可以使用一個SortedList<>
並添加了一個對象,其中包含3個List<>
實例。然後你需要寫一個比較器來排序你的對象StartDate
如果可以的話,請跟賈斯汀的答案一起。從長遠來看,它會讓人頭疼,因爲每個屬性都有意義。如果你需要一個快速的方法,你有.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);
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
可彎曲結構!收集你的女人和孩子,讓他們安全! – 2010-09-28 19:34:01
@Anthony Pegram:我認爲這是一種優化,它會提高排序操作的性能。如我錯了請糾正我。 – syntaxcheck 2010-09-28 20:06:32
我不知道結構與類在排序情況下的表現,除了說測試它,並在各種情況下看到,所有這些我都無法進入。但是我的評論指的是可變結構被認爲是邪惡的事實。看到這個問題,答案和鏈接的博客文章等,瞭解更多。 http://stackoverflow.com/questions/441309/why-are-mutable-structs-evil – 2010-09-28 20:51:49
蕩吧...打我給它。 :-p(+ 1,因爲手指比我快。) – JasCav 2010-09-28 18:36:43
按Startdate排序:var sortedList = infoList.OrderBy(x => x.StartDate) – HitLikeAHammer 2010-09-28 18:40:08
顯然它是按降序排列的,所以你應該使用'OrderByDescending() '。 – 2010-09-28 18:52:02