查找字符串中不存在的数字

时间:2018-12-29 19:47:25

标签: vb.net winforms

问题如下:我有一组从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 :(得分:2)

考虑到该问题引用了数字,因此您可以在以下位置将结果值用作实际数字(而不仅仅是数字的字符串表示形式):

  • List(Of Integer)的源字符串中提取值
  • 使用Enumerable.Range创建一个List(Of Integer),并使用与源编号的最大值对应的多个元素进行初始化
  • 使用Enumerable.Except
  • 使用部分数字过滤完整的数字列表
  • 如果需要,将结果List(Of Integer)转换为逗号分隔的值字符串。

注意
我假设源字符串已经过验证。如果不是,请使用Integer.TryParse而不是Integer.Parse。相关的示例代码在this (so very similar) question中。


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)

答案 1 :(得分:0)

这里有两个不使用LINQ的示例。

这个使用字典和列表:

<div>Camera Fria (oC)</div> 
<div><%= camera_fria_last %></div>

这个仅使用两个列表:

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