2009-05-05 19 views
21

birden ifadelerle sıralamak için LINQ akıcı sözdizimine benzer F # bir fonksiyon var mıdırOrderBy ThenBy F içerisinde

myList 
|> Seq.sort_by(fun x->x.Something) 
|> Seq.then_by(fun x->x.SomethingElse) 

Thx

cevap

40

anahtar tür olarak bir demet kullanın:

myList |> Seq.sortBy (fun x -> x.Something, x.SomethingElse) 
+1

Sağ, sözlük sırasını içinde küpe sıralayabilir, sadece ne isteniyorsa gelmez soldan sağa bir demet içinde sırayla birden fazla anahtarı koyarak . – Brian

+0

@ tim-robinson Anahtardaki her bir öğe için alfanum/doğal sıralama ile nasıl bir sıralama yapacağınızı biliyor musunuz? – Erick

+0

@Erick IComparable'ı elle uygularım ve Seq.sortBy'yi (özel IComparable uygulamamdaki sıralama anahtarını sarma) arayın veya System.Linq.Enumerable.OrderBy'yi arayın (ve IComparable'ı bir parametre olarak geçirin). –

1

Sıralama algoritmalarının bazılarını burada yararlı bulabilirsiniz, çünkü .NET işlevini kullanmanın yanı sıra sıralama yapmak için F # içinde bir bekleyiş bilmiyorum.

http://cs.hubfs.net/forums/thread/3876.aspx