2016-09-04 5 views
1

Как я могу получить минимальное значение стоимости объявления максимальное из этого примераМин и Макс из коллекции списка

Public Class RowsFound 
    Property RowIndex As integer 
    Property Qty As Integer 
    Property LineValue As Double 
End Class 
Dim Test as new List(Of RowsFound) 

выше вы можете увидеть структуру в мой список. Вот как выглядят данные. enter image description here

Что бы быть лучшим способом, чтобы получить RowIndex, основанный на максимальном LineValue и RowIndex Мин LineValue

Я сделал это как испытание, но хотел бы видеть, если есть лучший способ сделать это.

     Dim MaxRow As Integer = 0 
         Dim MaxRowValue As Integer = 0 
         Dim MinRow As Integer = 999999 
         Dim MinRowValue As Integer = 999999 
         For Each MinMaxitem As RowsFound In ListOfRows 
          If MinMaxitem.LineValue < MinRowValue Then 
           MinRow = MinMaxitem.RowIndex 
           MinRowValue = MinMaxitem.LineValue 
          End If 
          If MinMaxitem.LineValue > MaxRowValue Then 
           MaxRow = MinMaxitem.RowIndex 
           MaxRowValue = MinMaxitem.LineValue 
          End If 
         Next 

Спасибо :)

+0

вы пробовали что-нибудь? в чем смысл «лучшего»? Меньший код? Быстрое выполнение? Проще всего поддерживать? – Plutonix

+0

Да, я бы сказал, что наименьший и быстрый был бы идеальным. :) – Etienne

+0

http://stackoverflow.com/questions/35301862/finding-an-item-in-a-list-with-maximum-value –

ответ

0

простой способ сделать это было бы использовать LINQ:

Public Class RowsFound 
    Property RowIndex As Integer 
    Property Qty As Integer 
    Property LineValue As Double 
    Public Sub New(i As Integer, q As Integer, v As Double) 
     Me.RowIndex = i 
     Me.Qty = q 
     Me.LineValue = v 
    End Sub 
End Class 
Dim Test As New List(Of RowsFound) From {New RowsFound(0, 1, 105.25), New RowsFound(1, 2, 100), New RowsFound(2, 1, 110), New RowsFound(3, 2, 60.25)} 


Dim RowIndexMax As Integer = (From row As RowsFound In Test.OrderByDescending(Function(x) x.LineValue) Select row.RowIndex).First 
Dim RowindexMin As Integer = (From row As RowsFound In Test.OrderBy(Function(x) x.LineValue) Select row.RowIndex).First 
2

вы можете использовать лямбда-выражения:

  1. первый найти максимум \ Минимальное значение LineValue с использованием Max() и Min()

  2. найти индекс требуемого значения с помощью FindIndex()

    Private Function getMaxValueIndex() As Integer 
    Dim maxValue As Integer = Test.Max(Function(t) t.LineValue) 
    Dim maxValueIndex As Integer = Test.FindIndex(Function(t) t.LineValue = maxValue) 
    Return maxValueIndex 
    End Function 
    
    Private Function getMinValueIndex() As Integer 
    Dim minValue As Integer = Test.Min(Function(t) t.LineValue) 
    Dim minValueIndex As Integer = Test.FindIndex(Function(t) t.LineValue = minValue) 
    Return minValueIndex 
    End Function