2016-09-28 6 views
0

例として、私は1000のBananaTreeオブジェクトで満たされたbananaTreeArrayを持っています。これらの各BananaTreeオブジェクトには、Bananasというパブリックプロパティがあります。最もバナナのある5つのバナナツリーを見つけるための最も速い/最も簡単な方法は何ですか?プロパティの値によってオブジェクトのarraylistをソートする最速の方法

+0

最大の番号を検索する場合は、並べ替える必要はありません。 –

+0

これ以外の方法でこれを行うことはできますか? –

+1

いくつかの例があります[ここ](http://stackoverflow.com/questions/4956593/optimal-algorithm-for-returning-top-k-values-from-an-array-of-length-n)、[ここに](http://stackoverflow.com/questions/32395648/largest-5-in-array-of-10-numbers-without-sorting)と[here](http://stackoverflow.com/questions/4084495/find配列内の-top-n-elements)。 –

答えて

2

ArrayListではなく、一般的で強く型付けされたList(Of T)(この場合はList(Of BananaTree))を使用しないでください。そして、それはLINQで簡単です:

Dim top5Bananas = From btree In bananaTreeArray 
        Order by btree.Bananas Descending 
        Take 5 

それは本当にあなたがすべてのオブジェクトにキャストする必要がArrayListだ場合:

Dim top5Bananas = From btree In bananaTreeArray.Cast(of BananaTree)() 
        Order by btree.Bananas Descending 
        Take 5 

をすることはできいずれかのループFor Eachまたはリスト/配列を作成し、Feがこのクエリ:

Dim top5BananaList = top5Bananas.ToList() 
+0

これに基づいて 'Dim top5Bananas = btree.OrderByDescending(function(b)b.Bananas).Take(5)'を使用できます。 –

+0

@KeithMifsud:はい、それはメソッド構文ですが、実際の違いはありません。私はしばしばVB.NETのクエリー構文を好んでいます。なぜなら、C#では、 'Take'がサポートされています)より読みやすく(醜い' Function'キーワードのために)より強力です。 –

+0

はい、どちらも同じことをしていますが、私はOPに両方の選択肢が提示されるように投稿しました。個人的には、複雑なクエリでは、メソッド構文が私にもっと役立ちます:) –

関連する問題