Показать максимальное значение из текстового поля строки

#vb.net

#vb.net

Вопрос:

Допустим, у меня есть текстовое поле со следующими значениями:

 Lines1 - 180
Lines2 - 190
Lines 3- 200
Lines 4- 220
Lines 5- 230
Lines 6- 260
Lines 7 - 280
Lines 8 - 144
Lines 9 - 125
Lines 10 -160
  

Как я могу отобразить строку с наибольшим значением? (Например, если мое текстовое поле содержит 250 цифр и несколько строк, я хочу отобразить строку, в которой максимальное значение находится в другом текстовом поле.

Как я могу сделать это для самых 5 высоких или 10 самых высоких значений в моем текстовом поле? Показать значение строки.

Пример: наибольшее значение равно Line 7 - with value 280.

Вывод: Текстовое поле 1.текст — Первая строка 0 — ничего. (просто пробел)

 8
10
13
13
14
17
10
11
14
15
  

Ответ №1:

Вы можете сделать это с помощью LINQ:

 Public Function GetMax() As String
  Dim oDirtyLines As List(Of String)
  Dim sMaxLine As String
  Dim iIndex As Integer

  oDirtyLines = Split(TextBox1.Text, vbCrLf).ToList

  Dim oCleanLines = oDirtyLines.Select(Function(Line)
                                         Return New With {
                                                           .Line = Split(Line, "-").First,
                                                           .Value = Split(Line, "-").Last,
                                                           .Index = oDirtyLines.IndexOf(Line)
                                                         }
                                       End Function)

  iIndex = oCleanLines.OrderBy(Function(Line) Line.Value.Trim).Last.Index

  sMaxLine = oDirtyLines(iIndex)

  Return sMaxLine
End Function
  

Комментарии:

1. Как использовать для минимального значения? Меньшее значение.

2. @NikoMario ~ Получить .First.Index вместо .Last.Index .

Ответ №2:

Обновлено

 Dim myList = TextBox1.Lines.ToList
Dim removedEmptyLinesCount = myList.RemoveAll(Function(str) String.IsNullOrWhiteSpace(str))
Dim maxValue = myList.Select(Function(line)
                                         Dim res = 0
                                         Integer.TryParse(line, res)
                                         Return res
                                     End Function).Min() ' or Max()
Dim lineIndex = myList.IndexOf(maxValue)   removedEmptyLinesCount
  

Этот код учитывает, содержит ли ваше текстовое поле какие-либо нецелочисленные значения, поэтому, если входные данные, подобные следующим:

 150
60
xx
300
20
yy
45
  

Результаты должны быть:

 maxValue  = 300
lineIndex = 3 (Zero-based index)
  

Комментарии:

1. Но чтобы показать меньшее, как я могу это сделать? Я сделал максимальное значение, но мне также нужно минимальное.

2. @NikoMario использовать .Min() вместо .Max()

3. Вы только что заменили Max на Min в моем коде? Если вы это сделали, это должно сработать.

4. Не работает правильно. У меня проблема в том, что первая строка ничего не содержит, то есть строка 0, и начинается со строки 1, к сожалению, с -1 все время отображается одно и то же значение -1. — но в обмен на максимальное значение сработало правильно.

5. Покажите мне вводимый текст, пожалуйста