#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. Покажите мне вводимый текст, пожалуйста