2015-02-06 66 views
-3

我有名單的數組:獲取列表idexes的數組列表與的greates elementrs計數C#

​​

例如:

Graph[0] = new List<int>() { 1, 2 }; 
Graph[1] = new List<int>() { 0 }; 
Graph[2] = new List<int>() { 0, 1, 3, 4 }; 
Graph[3] = new List<int>() { 2, 4, 1 }; 
Graph[4] = new List<int>() { 2, 3 }; 

Graph[0].Count // give 2 
Graph[1].Count // give 1 
Graph[2].Count // give 4 
Graph[3].Count // give 3 
Graph[4].Count // give 2 

我想獲得一個數組(或列表),其中包括按每個列表中元素的數量排序的列表的索引。因此,對於此示例,它將是:

orderList[0] -> 2 //(because Graph[2].Count give 4) 

orderList[1] -> 3 //(because Graph[3].Count give 3) 

orderList[2] -> 0 //(because Graph[0].Count give = 2) 

orderList[3] -> 4 //(because Graph[4].Count give = 2) 

orderList[4] -> 1 //(because Graph[1].Count give = 1) 

orderList是一個n元素數組。

+1

你能澄清嗎? – Greg 2015-02-06 22:42:11

+0

你想排序清單嗎?從最高到最低? – TheUknown 2015-02-06 22:43:03

+0

好吧給你好! – mybirthname 2015-02-06 22:49:18

回答

3

您可以使用集成的索引列表數與指數

int[] orderList = Graph.Select((list, index) => new { Count = list.Count, Index = index }).OrderByDescending(a => a.Count).Select(a => a.Index).ToArray(); 
相結合的選擇方法

更具可讀性的查詢語法

int[] orderList = (from pair in Graph.Select((list, index) => new { Count = list.Count, Index = index }) 
        orderby pair.Count descending 
        select pair.Index).ToArray(); 
+0

不要倒票和不發表評論。 – Greg 2015-02-06 22:59:48

+0

Downvoter謹慎解釋? – Stilgar 2015-02-06 23:01:06

+0

我沒有投下選票,有人正在試圖通過投下投票來更多地關注他們的答案。我在我的回答中添加了相同的評論,因爲有人投了票。 – Greg 2015-02-06 23:02:46

-2

你可以使用LINQ:

List<int>[] orderedGraph = graph.OrderByDescending(x => x.Count).ToArray(); 

這將責令陣列使用列表降 「計數」 屬性。

記得使用添加:

using System.Linq; 
+0

他要求int數組不是int列表數組。 – Stilgar 2015-02-06 23:16:44

+0

仔細閱讀 - 他想要一些列表。他寫道:「包含所有列表的數組按照降序排列元素」。所以我不明白我的-1。 – Luke 2015-02-06 23:20:32

+0

不,這是一個錯誤的編輯。他原來的文本是「我想獲得包含最大列表元素數量的數組」。請注意,數據顯然是整數。 – Stilgar 2015-02-06 23:26:39

0

所有你需要的是:

Graph = Graph.OrderByDescending(x => x.Count).ToArray(); 
+0

不,他不想要一個新的數組列表,他想要一個索引數組 – Stilgar 2015-02-06 23:08:53