Чтобы найти мин.значение в списке в vb.net - PullRequest
2 голосов
/ 30 июля 2011

У меня есть список определенного класса. В этот список включен класс позиции. И этот класс позиции включает в себя координаты X и Y. У меня есть текущие координаты и координаты в списке. Я хочу рассчитать расстояние для каждого элемента в списке и найти, какой элемент имеет минимальное расстояние. Вот мой код:

  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

так что расстояние - это расстояние между моими координатами и предметом. Я рассчитываю его для каждого элемента в списке, но как мне найти минимальный?

Спасибо.

Ответы [ 3 ]

3 голосов
/ 30 июля 2011

Использование Linq в VB.NET:

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));

для получения дополнительной информации и примеров о Linq в VB.NET см. http://msdn.microsoft.com/en-us/vbasic/bb688088

1 голос
/ 30 июля 2011

Опираясь на LINQ @ Yahia, ответьте немного, чтобы получить предмет и расстояние до него.

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.
1 голос
/ 30 июля 2011

Создайте переменную для минимального значения и проверьте ее по каждому значению в цикле.

Вы должны анализировать текст из элементов управления вне цикла, тратить его впустую снова и снова внутри цикла. Вам также следует включить строгий режим, чтобы не выполнять неявные преобразования, которые не должны быть неявными.

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
...