2011-07-30 9 views
2

私は特定のクラスのリストを持っています。 このリストには、ポジションクラスが含まれています。 その位置クラスにはX座標とY座標が含まれます。 私はCurrent Coordinatesと座標をリストに入れています。 リスト内の各アイテムの距離を計算して、最小距離を持つアイテムを探したいとします。ここ は私のコードです:分を見つけるにはvb.netのリストの値

For Each item As ITEMX In xHandle.ItemList 

     Dim CurrX As Integer = txt_TrainX.Text 
     Dim CurrY As Integer = txt_TrainY.Text 
     Dim NextX As Integer = item.Position.x 
     Dim NextY As Integer = item.Position.y 

     Dim distance As Integer = DistanceBetween(CurrX, CurrY, NextX, NextY) 


    Next 

ので距離は私の座標と項目の間の距離です。 リストの各項目について計算しますが、どのように最小限のものを見つけるのですか?

ありがとうございます。 VB.NETでのLINQを使用して

答えて

1

が最小値の変数を作成し、各値に対してそれをチェックしてくださいループ。

ループ外のコントロールからテキストを解析する必要があります。繰り返しループ内で何度も何度もやり直すのは無駄です。厳密なモードをオンにして、暗黙的ではない暗黙の変換を行わないようにする必要があります。

Dim minimal As Nullable(Of Integer) = Nothing 

Dim CurrX As Integer = Int32.Parse(txt_TrainX.Text) 
Dim CurrY As Integer = Int32.Parse(txt_TrainY.Text) 

For Each item As ITEMX In xHandle.ItemList 

    Dim NextX As Integer = item.Position.x 
    Dim NextY As Integer = item.Position.y 

    Dim distance As Integer = DistanceBetween(CurrX, CurrY, NextX, NextY) 

    If Not minimal.HasValue or distance < minimal.Value Then 
    minimal.Value = distance 
    End If 

Next 
+0

私は彼らが助けると思う。 – sarkolata

3

:VB.NETでのLINQのabountいくつかの情報やサンプルについて

Dim CurrX As Integer = txt_TrainX.Text 
Dim CurrY As Integer = txt_TrainY.Text 

Dim NearestITEM = xHandle.ItemList.Min (Function(i) DistanceBetween(CurrX, CurrY, i.Position.x, i.Position.y)); 

http://msdn.microsoft.com/en-us/vbasic/bb688088

1

@ YahiaのLINQでのビルドは、アイテムとアイテムの距離を取得するためにちょっと答えます。

Dim CurrX = CInt(txt_TrainX.Text) 
Dim CurrY = CInt(txt_TrainY.Text) 

Dim itemsWithDistance = (From item in xHandle.ItemList 
         Select New With {.Item = item, 
              .Distance = DistanceBetween(CurrX, CurrY, item.Position.x, item.Position.y)}).ToList() 

' At this point you have a list of an anonymous type that includes the original items (`.Item`) and their distances (`.Distance`). 
' To get the one with the smallest distance you can do. 
Dim nearestItem = itemsWithDistance.Min(Function(i) i.Distance) 

' Then to see what that distance was, you can 
Console.WriteLine(nearestItem.Distance) 

' or you can access nearestItem.Item to get at the source item. 
関連する問題