2012-05-19 43 views
2

我有一个不可比较的对象列表。然而,我仍然想根据提供的索引位置数组对这个对象列表进行排序。排序此列表的最快和最有效的方法是什么?这里有一个例子:对非可比对象排序

List<Colour> list = new ArrayList<Colour>(); 
list.add(Colour.BLUE); 
list.add(Colour.GREEN); 
list.add(Colour.RED); 
list.add(Colour.YELLOW); 
list.add(Colour.GREEN); 

int[] order = new int[] {3, 1, 2, 0, 4}; 

的最终名单应该是这样的:

[YELLOW, GREEN, RED, BLUE, GREEN] 

我的具体要求是在Java的解决方案,但我很想知道其他语言的解决方案,以及。

+0

了java.util.Comparator是您的解决方案 – bestsss

+1

您应该使用地图,而不是列出 – Ketan

+0

比较是没有用的。你如何定义在RED和GREEN之间应该先选择哪一个?请完整阅读该问题。 –

回答

5

为什么不直接从索引创建列表?不需要“分类”。

List<Colour> sortedList = new ArrayList<Colour>(); 
for (int index : order) { 
    sortedList.add(list.get(index)); 
} 

或C#:

var sorted = order.Select(index => list[index]).ToList(); 
+0

我喜欢这种类型的答案,“做X的最好方法就是不去做”。 – paxdiablo