我有一份名单。
List<List<T>> li = {
{a1,a2,a3 ... aN},
{b1,b2,b3 ... bN},
...
};
double foo(List<T> list)
{
// do something
// e.g {1,2,3}
// it = 1 + 2 + 3
return it;
}
现在,我想对li
进行排序,使foo(x)
越高,x
越高,它就应该出现在排序列表中。
用C#/Python/任何其他语言来说最好的方法是什么?
发布于 2010-01-07 11:44:47
再加上一点LINQ:
var q = from el in li
orderby foo(el)
select el;
li = q.ToList();
发布于 2010-01-07 11:44:55
这是Python的方式:只需将函数作为key
参数传递给sorted()
或.sort()
>>> mylist = [123, 765, 4, 13]
>>> def mod5(x):
... return x%5
...
>>> sorted(mylist, key = mod5)
[765, 123, 13, 4]
>>> sorted(mylist, key = mod5, reverse = True)
[4, 123, 13, 765]
发布于 2010-01-07 15:00:37
红宝石:
mylist = [[1,2,3],
[3,5,9],
[1,1,1],
[10,23,14]]
sortedlist = mylist.sort {|a,b| b.inject {|sum, n| sum + n } <=> a.inject {|sum,n| sum + n}}
我不确定Code的规则和我没有编写foo方法,但是在foo中可以很容易地得到和。
我的测试输出:
puts sortedlist.inspect
[10、23、14、3、5、9、1、2、3、1、1、1、1]
https://stackoverflow.com/questions/2019951
复制相似问题