2011-11-15 90 views
2

如何按照降序對通用列表中的相同值字段進行排序。對列表中的相同值字段進行排序

例子:

List<int> objList = new List<int>(); 

objList.Add(1); 
-> objList.Add(0); 
-> objList.Add(0); 
objList.Add(2); 
-> objList.Add(0); 

這是我的源不知何故,我想以降序模式零個值進行排序,例如。

我使用這個代碼來排序數字(實際上是深度),上面的例子與此無關,但不知何故它是相同的。在我的通用列表中,我有幾個深度,它們可能彼此相同,我想要下降相同的字段。

Objects.Sort(
    delegate(Classes.Object.GameObject Object1, Classes.Object.GameObject Object2) 
    { 
     return Object1.Depth.CompareTo(Object2.Depth); 
    } 
); 

答:可能有助於有人在未來

// Reverse same oredered 
    CurrentSameOrderedFind = Objects[0].Depth; 
    CurrentSameOrderedID = 0; 
    for (int i = 1; i <= Objects.Count - 1; i++) 
    { 
     if (Objects[i].Depth != CurrentSameOrderedFind) 
     { 
      SameOrederedFound = true; 
      Objects.Reverse(CurrentSameOrderedID, i - 1); 
      CurrentSameOrderedFind = Objects[i].Depth; 
      CurrentSameOrderedID = i; 
     } 
    } 
    if (!SameOrederedFound) 
    { 
     Objects.Reverse(); 
    } 
+1

你的問題很不清楚。例如,「上面的例子與此無關,但不知何故它是相同的」 - 這是什麼意思?如果你能更清楚地解釋這個問題,我們更有可能幫助你。 –

+0

:)我不知道應該擴展多少。很簡單,按降序對相同的值域重新排序。這就像你有'(Field [0] = 0,Field [1] = 1,Field [2] = 0)'然後結果應該是'(Field [2],Field [0],Field [1] );'簡單! – MahanGM

+0

不,一點也不簡單 - 你說的「同樣價值的領域」究竟意味着什麼?如果你可以給出一個簡短但完整的例子來顯示你的輸入和期望的輸出,那真的會有幫助。 –

回答

1

如果我理解正確,您希望您的列表按照GameObject.Depth的降序排序,並且您已經有了一個對您的集合進行排序的實現,但是按升序而不是降序排列。鑑於此,這裏是我可以想出的最懶的答案:

代碼根據我的評論編輯。真的,爲什麼你不能在問題中說出你想要的?我同意這並不複雜,但如果你不提出很好的問題,你就不會得到很好的幫助。

List<GameObject> oldList = new List<GameObject>(Objects); 
    Objects.Sort( 
     delegate(Classes.Object.GameObject Object1, Classes.Object.GameObject Object2) 
     { 
      int compareValue = -1 * Object1.Depth.CompareTo(Object2.Depth); 
      if(compareValue == 0) 
       compareValue = oldList.IndexOf(Object2).CompareTo(oldList.IndexOf(Object1)); 
      return compareValue; 
     } 
    ); 

幾乎不是最佳的,但它並不意味着是。

+0

不是整個列表,而是相同的值深度.. – MahanGM

+0

@MahanGM - 然後你需要一個額外的屬性進行比較,至少對於你已經使用過的'delegate'語法,你沒有指定一個。我將編輯我的答案,使用列表索引作爲屬性(按降序排列,所以list [0]出現在列表[1]後面,如果它們都具有相同的深度),因爲我有一個偷偷摸摸的懷疑,那就是你想要的無論什麼原因,根據你的問題的評論。 –

+0

我做過但有一些問題,他們問這麼幾次,他們沒有明確的觀點!關於更新的代碼,它看起來不錯,但是它只關心零值?相同的值可以是任何數字。 – MahanGM

3

要排序List<int>,你的代碼上面顯示,按降序排列,有一個非常簡單的Linq的解決方案:objList = objList.OrderByDescending(i => i).ToList();

從閱讀其餘的問題,你想排序一個深度屬性的對象列表?如果是的話,這應該爲你工作:

var myList = new List<someTypeWithDepth>(); 
myList = myList.OrderByDescending(o => o.depth).ToList(); 

如果在任何情況下,你正在使用這些列表,你可以用打字他們作爲IEnumerable<T>而不是List<T>,那麼你可以刪除那些醜陋ToList()電話脫身

+1

OrderByDescending調用(與所有LINQ一樣)不會訂購列表,它們將返回有序數據作爲IOrderedEnumerable

+0

不錯!我會試試看。但是Aron Mclver說了些什麼? – MahanGM

+0

@AaronMcIver - 當然他們會。謝謝。糾正。 –

相關問題