Найти числа, которые не существуют в строке - PullRequest
0 голосов
/ 29 декабря 2018

Проблема заключается в следующем: у меня есть набор чисел от 1 до 80.
В Textbox1.Text У меня есть следующие цифры:

TextBox1.Text = "1,4,5,6,7,8,12,13,14,15,16,17,18,19,20,21,22,23,25,28,29,31,33,
                 34,35,36,37,39,40,41,45,46,47,48,49,51,53,54,55,57,59,60,61,62,
                 63,64,66,67, 68,69,70,71,72,73,75,76,77,78,79,80"

Как отобразить, в TextBox2.Text, числа которых не в TextBox1, от 1 до 80?

TextBox2.Text = "2,3,9,10,11 and so on..."

Ответы [ 2 ]

0 голосов
/ 30 декабря 2018

Вот два примера, не использующих LINQ.

В этом используются словарь и список:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim n As Integer
    Dim present As New Dictionary(Of Integer, Boolean)
    For Each strValue As String In TextBox1.Text.Split(",".ToCharArray, StringSplitOptions.RemoveEmptyEntries)
        If Integer.TryParse(strValue, n) Then
            present.Add(n, True)
        End If
    Next

    Dim notPresent As New List(Of Integer)
    For i As Integer = 1 To 80
        If Not present.ContainsKey(i) Then
            notPresent.Add(i)
        End If
    Next

    TextBox2.Text = String.Join(",", notPresent.ToArray)
End Sub

В этом просто используются два списка:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim n As Integer
    Dim present As New List(Of Integer)
    For Each strValue As String In TextBox1.Text.Split(",".ToCharArray, StringSplitOptions.RemoveEmptyEntries)
        If Integer.TryParse(strValue, n) Then
            present.Add(n)
        End If
    Next
    present.Sort() ' optional; if you need these sorted for something else

    Dim notPresent As New List(Of Integer)
    For i As Integer = 1 To 80
        If present.IndexOf(i) = -1 Then
            notPresent.Add(i)
        End If
    Next

    TextBox2.Text = String.Join(",", notPresent.ToArray)
End Sub
0 голосов
/ 29 декабря 2018

Учитывая, что вопрос относится к числам , поэтому полученные значения могут быть использованы где-то как фактические числа (а не только как строковое представление чисел), вы можете:

  • Извлечьзначения из исходной строки в List(Of Integer)
  • Создайте List(Of Integer), инициализированный с количеством элементов, соответствующих максимальному значению исходных чисел, используя Enumerable.Range
  • Отфильтруйте полный список чисел, используя неполный, используя Enumerable.Except
  • Преобразуйте полученный List(Of Integer) в строку значений, разделенных запятыми, если это необходимо.

Примечание :
Я предполагаю, что исходная строка уже была проверена.Если это не так, используйте Integer.TryParse вместо Integer.Parse .Соответствующий пример кода находится в этом (очень похожем) вопросе .


Dim BaseNumbers As List(Of Integer) = 
    txtInput.Split(","c).Select(Function(n) Integer.Parse(n)).OrderBy(Function(n) n).ToList()

'Get the List of missing numbers in the source range of values
Dim ResultList As List(Of Integer) = 
    Enumerable.Range(1, BaseNumbers.Max()).Except(BaseNumbers).ToList()

'Convert to string the resulting List
Dim resultString = String.Join(",", ResultList)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...