2012-12-09 153 views
0

我有2個清單,什麼是對的:訂購2列表中的元素,根據1名列表中的元素

List<int> timeStamp = new List<int>(); 
List<string> ownerStamp = new List<string>(); 

例如: 時間戳」元素:1,10,32 ...

ownerStamp '元素:約翰,戴夫,瑪麗亞...

對:John-1;戴夫-10; Maria-32 ...

我必須訂購時間戳列表的元素,但我必須保持上下文!我該怎麼做?手動?或者在工廠訂購時聰明?

回答

2

Array.Sort()方法有一個重載,它允許您使用其他數組項作爲關鍵字排序一個數組。您可以將列表轉換爲數組,然後對它們進行排序,然後再轉換回:

List<int> timeStamp = new List<int>(); 
List<string> ownerStamp = new List<string>(); 

int[] timeStampArray = timeStamp.ToArray(); 
string[] ownerStampArray = ownerStamp.ToArray(); 

Array.Sort(timeStampArray, ownerStampArray); 

timeStamp = new List<int>(timeStampArray); 
ownerStamp = new List<string>(ownerStampArray); 
+0

Thx for ur help! :) – bandeee

0

最好的,如果你把對連成一個「SortedDictionary」,它會自動爲你對排序,或創建的元組爲timeStampownerStamp的列表,然後根據元組列表中的元素進行排序timeStamp鍵。

1

你可能會更好做的容器對象,它同時包含所有者和時間戳,並使其可比性:

class Entry : IComparable<Entry> { 
    public int TimeStamp { get; set; } 
    public string Owner { get; set; } 

    public Entry(int timeStamp, string owner) { 
     this.TimeStamp = timeStamp; 
     this.Owner = owner; 
    } 

    public int CompareTo(Entry other) { 
     return this.TimeStamp.CompareTo(other.TimeStamp); 
    } 
} 

然後,您可以讓這些列表,並使用List<T>Sort() method對其進行排序。

要訪問時間戳記和所有者,只需訪問EntryTimeStampOwner字段。

一般來說,如果你想讓數據集中在一起,最好將它們明確地分組在一個對象或結構中;那麼分組將自動發生,而不需要特別注意將事物分組。

1

您的問題沒有具體指定您期望的輸出,但以下內容將爲您提供Tuple對象的排序集合,其第一項是時間戳,第二項是擁有者。

timeStamp.Zip(ownerStamp, (i,s) => Tuple.Create(i,s)).OrderBy(t => t.Item1) 
0

一個排序的字典可能的幫助。