VB.NET中的List用法

本文探讨了移动开发领域的关键技术,包括iOS、Android、鸿蒙等平台的开发,同时涉及大数据处理技术如Hadoop、Spark等,展示了如何将前端与后端、移动应用与大数据分析进行有效整合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


Imports System.IO
Imports System.Data.OleDb
Public Class Form_mobilecodeFilter
    Public list As New List(Of String)
    Public mobilecode As New List(Of mobile)
    Public loadlist As New List(Of plist)

    '结构体

    Public Structure mobile
        Public mobilecode As String
        Public Province As String
        Public City As String
        Public Card As String
    End Structure

    Public Structure plist
        Public province As String
        Public mobileNew As List(Of citylist)
    End Structure

    Public Structure citylist
        Public city As String
        Public mobilecontext As List(Of mobileLoadwritetxt)
    End Structure

    Public Structure mobileLoadwritetxt
        Public context As String
        Public mobilecode As String
        Public Province As String
        Public City As String
        Public Card As String
    End Structure

    Private Sub Button_Importmobilecode_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Importmobilecode.Click
        Dim fileName As String
        OpenFileDialog_ImportMobileCode.Filter = "文本文件(*.txt)|*.txt"
        OpenFileDialog_ImportMobileCode.ShowDialog()
        fileName = OpenFileDialog_ImportMobileCode.FileName
        TextBox_Importfilepath.Text = fileName

        Dim path As String
        Dim line As String = String.Empty
        path = TextBox_Importfilepath.Text
        Try
            FileOpen(1, path, OpenMode.Input)
        Catch ex As Exception
            FileClose(1)
            FileOpen(1, path, OpenMode.Input)
        End Try
        line = ""

        Do While Not EOF(1)
            Input(1, line)
            If line.Trim <> "" Then
                list.Add(line)
            End If
        Loop
        FileClose(1)
    End Sub

    Private Sub Button_Checkout_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Checkout.Click

        Dim fileName As String
        Dim result As DialogResult = FolderBrowserDialog_download.ShowDialog()
        fileName = FolderBrowserDialog_download.SelectedPath
        Dim i, j, k As Integer
        Dim cl As citylist
        Dim mo As mobileLoadwritetxt
        For i = 0 To loadlist.Count - 1
            Dim txtpath As String = fileName & "\" & loadlist.Item(i).province
            System.IO.Directory.CreateDirectory(txtpath)
            For j = 0 To loadlist.Item(i).mobileNew.Count - 1
                cl = loadlist.Item(i).mobileNew.Item(j)
                Dim writefile As New StreamWriter(txtpath & "\" & cl.city & ".txt")
                For k = 0 To cl.mobilecontext.Count - 1
                    mo = cl.mobilecontext.Item(k)
                    Dim context As String = mo.context
                    Dim province As String = mo.Province
                    Dim City As String = mo.City
                    Dim mobilecode As String = mo.mobilecode
                    Dim Card As String = mo.Card
                    Dim writecontext As String = ""
                    If CheckBox_ID.Checked Then
                        writecontext = writecontext & k 1 & "   "
                    End If
                    If CheckBox_mobilecode.Checked Then
                        writecontext = writecontext & context & "     "
                    End If
                    If CheckBox_province.Checked Then
                        writecontext = writecontext & province & "    "
                    End If
                    If CheckBox_city.Checked Then
                        writecontext = writecontext & City & "    "
                    End If
                    If CheckBox_haoduan.Checked Then
                        writecontext = writecontext & mobilecode & "    "
                    End If
                    If CheckBox_execute.Checked Then
                        writecontext = writecontext & Card
                    End If
                    writefile.WriteLine(writecontext)
                Next
                writefile.Flush()
                writefile.Close()
            Next
        Next
        TextBox_Importfilepath.Text = ""
        MessageBox.Show("完成")

    End Sub

    Private Sub Button_closeMe_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_closeMe.Click
        Me.Close()
    End Sub

    Public Sub loadmobile()
        Dim SQLGroupStr = "select * from mobile"
        Dim CString As String = " Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\ctc-nft.mdb;Persist Security Info=True"
        Dim con As New OleDbConnection(CString)
        Dim com As New OleDbCommand()
        com.Connection = con
        con.Open()
        com.CommandType = CommandType.Text
        com.CommandText = SQLGroupStr
        Dim rs As OleDbDataReader = com.ExecuteReader()
        While (rs.Read)
            Dim m As New mobile
            m.mobilecode = rs.GetString(0)
            m.Province = rs.GetString(1)
            m.City = rs.GetString(2)
            m.Card = rs.GetString(3)
            mobilecode.Add(m)
        End While
        con.Close()
    End Sub

    Private Sub Button_manage_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_manage.Click
        loadmobile()
        MessageBox.Show("在处理中可能要等几分钟,请稍等.........", "提示")
        Dim i, j As Integer
        Dim a As Integer = 1
        Dim m As mobile
        For i = 0 To mobilecode.Count - 1
            m = mobilecode.Item(i)
            For j = 0 To list.Count - 1
                If m.mobilecode.ToString.Equals(list.Item(j).ToString.Substring(0, 7)) Then
                    If a = 1 Then
                        a = a 1
                        Dim pl As New plist
                        pl.province = mobilecode.Item(i).Province
                        Dim lm As New citylist
                        lm.city = mobilecode.Item(i).City
                        Dim mo As New mobileLoadwritetxt
                        mo.Card = mobilecode.Item(i).Card
                        mo.City = mobilecode.Item(i).City
                        mo.context = list.Item(j)
                        mo.mobilecode = mobilecode.Item(i).mobilecode
                        mo.Province = mobilecode.Item(i).Province
                        lm.mobilecontext = New List(Of mobileLoadwritetxt)
                        lm.mobilecontext.Add(mo)
                        pl.mobileNew = New List(Of citylist)
                        pl.mobileNew.Add(lm)
                        loadlist.Add(pl)
                    Else
                        Dim sp As String = isProvince(loadlist, mobilecode.Item(i).Province)
                        Dim str() As String = sp.Split(" ")
                        Dim flagprovince As String = str(0)
                        Dim flag As Boolean
                        If flagprovince.ToString.Equals("1") Then
                            flag = True
                        Else
                            flag = False
                        End If
                        If flag = True Then
                            Dim sc As String = iscity(loadlist, mobilecode.Item(i).City)
                            Dim str1() As String = sc.Split(" ")
                            Dim flagcity As Boolean
                            If str1(0).ToString.Equals("1") Then
                                flagcity = True
                            Else
                                flagcity = False
                            End If
                            If flagcity = True Then
                                Dim mob As New mobileLoadwritetxt
                                mob.Card = mobilecode.Item(i).Card
                                mob.City = mobilecode.Item(i).City
                                mob.context = list.Item(j)
                                mob.mobilecode = mobilecode.Item(i).mobilecode
                                mob.Province = mobilecode.Item(i).Province
                                loadlist.Item(str(1)).mobileNew.Item(str1(1)).mobilecontext.Add(mob)
                            Else
                                Dim cl As New citylist
                                cl.city = mobilecode.Item(i).City
                                Dim mi As New mobileLoadwritetxt
                                mi.Card = mobilecode.Item(i).Card
                                mi.City = mobilecode.Item(i).City
                                mi.context = list.Item(j)
                                mi.mobilecode = mobilecode.Item(i).mobilecode
                                mi.Province = mobilecode.Item(i).Province
                                cl.mobilecontext = New List(Of mobileLoadwritetxt)
                                cl.mobilecontext.Add(mi)
                                loadlist.Item(str(1)).mobileNew.Add(cl)
                            End If
                        Else
                            Dim pl As New plist
                            pl.province = mobilecode.Item(i).Province
                            Dim lm As New citylist
                            lm.city = mobilecode.Item(i).City
                            Dim mo As New mobileLoadwritetxt
                            mo.Card = mobilecode.Item(i).Card
                            mo.City = mobilecode.Item(i).City
                            mo.context = list.Item(j)
                            mo.mobilecode = mobilecode.Item(i).mobilecode
                            mo.Province = mobilecode.Item(i).Province
                            lm.mobilecontext = New List(Of mobileLoadwritetxt)
                            lm.mobilecontext.Add(mo)
                            pl.mobileNew = New List(Of citylist)
                            pl.mobileNew.Add(lm)
                            loadlist.Add(pl)
                        End If
                        End If
                End If
            Next
        Next
        MessageBox.Show("请立即导入,当关闭此窗口数据就会销毁", "提示")
    End Sub

    Public Function isProvince(ByVal list As List(Of plist), ByVal str As String)
        Dim i As Integer
        For i = 0 To list.Count - 1
            If str.ToString.Equals(list.Item(i).province.ToString) Then
                Return 1 & " " & i
            End If
        Next
        Return 0 & " " & i - 1
    End Function

    Public Function iscity(ByVal list As List(Of plist), ByVal str As String)
        Dim i, j As Integer
        Dim pl As plist
        pl.mobileNew = New List(Of citylist)
        Dim cl As citylist
        For i = 0 To list.Count - 1
            pl.mobileNew = list.Item(i).mobileNew
            For j = 0 To pl.mobileNew.Count - 1
                cl = pl.mobileNew.Item(j)
                If cl.city.ToString.Equals(str) Then
                    Return 1 & " " & j
                End If
            Next
        Next
        Return 0 & " " & j - 1
    End Function

End Class

     '此段代码现给有一定编程基础的朋友

<think>我们正在处理用户的问题:在VB.NET中从列表集合中删除重复元素。根据用户的问题,我们需要提供在VB.NET中从List(Of T)中删除重复元素的方法。注意:用户提到的是“列表集合”,我们假设这里指的是泛型List(OfT),因为这是常用的列表类型。在VB.NET中,List(Of T)是一个泛型集合,它允许重复元素和null(对于引用类型)。要删除重复元素,我们可以考虑以下几种方法:1.使用LINQ的Distinct方法:这是最简单的方法,它返回一个去重后的序列。2.使用HashSet(OfT)构造方法:HashSet本身就不允许重复,所以我们可以将List转换为HashSet,然后再转换回List(但会失去原始顺序)。3.如果希望保持顺序,可以自己编写一个方法,比如遍历列表并将元素添加到一个新的列表(同时使用一个HashSet来检查重复)。注意:用户可能关心是否保持元素的顺序。LINQ的Distinct方法在.NET Framework中保持顺序(根据文档,它返回序列中的非重复元素,顺序与原始序列相同)。但在使用HashSet然后转换回List时,顺序可能不被保留(因为HashSet不保证顺序)。因此,推荐使用Distinct方法。另外,用户可能还需要考虑自定义类型的去重。对于自定义类型,我们需要重写Equals和GetHashCode方法,或者提供一个自定义的IEqualityComparer(OfT)给Distinct方法。下面我们给出具体的代码示例:方法1:使用LINQ的Distinct方法(保持顺序)```vb.netDimlistWithDuplicatesAs List(OfString)= ...'假设这是有重复的列表Dim distinctList AsList(Of String) =listWithDuplicates.Distinct().ToList()```方法2:使用HashSet(不保持顺序,但可以快速去重)```vb.netDim hashSet AsNew HashSet(OfString)(listWithDuplicates) DimdistinctListAs List(OfString)= hashSet.ToList()'注意:顺序可能被打乱```方法3:自定义方法(保持顺序)如果不想使用LINQ,可以自己写:```vb.netPublic FunctionRemoveDuplicates(Of T)(ByVal itemsAs List(OfT))As List(OfT)Dimset AsNew HashSet(OfT)()Dim distinctList AsNew List(OfT)()For Eachitem AsT InitemsIfset.Add(item)ThendistinctList.Add(item)EndIfNextReturn distinctListEnd Function```对于自定义类型,例如一个Person类,我们可以这样使用:假设我们有一个Person类:```vb.netPublic ClassPersonPublicProperty IdAs IntegerPublic PropertyName AsStringEnd Class```如果我们想根据Id来去重,我们可以提供一个自定义的比较器:```vb.netPublic ClassPersonIdComparerImplementsIEqualityComparer(Of Person)Public OverloadsFunction Equals(xAs Person, yAs Person) AsBoolean Implements IEqualityComparer(OfPerson).EqualsReturnx.Id= y.IdEndFunctionPublicOverloads FunctionGetHashCode(objAs Person) AsInteger Implements IEqualityComparer(OfPerson).GetHashCodeReturnobj.Id.GetHashCode()EndFunctionEnd Class```然后使用:```vb.netDim distinctPersons =persons.Distinct(New PersonIdComparer()).ToList()```根据用户的需求,我们提供这些方法。用户可以根据自己的需要选择合适的方法。注意:引用[2]提到List接受null和重复元素,所以我们的去重方法也需要考虑null的情况。在.NET中,Distinct方法和HashSet都可以处理null值(因为null可以比较相等)。因此,我们推荐使用LINQ的Distinct方法,因为它简单且保持顺序。下面我们按照要求生成相关问题。</think>### 在 VB.NET 中删除列表重复元素的方法 在 VB.NET 中,从 `List(Of T)` 集合中删除重复元素主要有以下几种方法(均保持原始顺序): #### 方法 1:使用 LINQ 的 `Distinct()`(推荐) ```vb.net Dim originalList As New List(Of String) From {"A", "B", "A", "C", "B"} Dim distinctList = originalList.Distinct().ToList() ' 结果:{"A", "B", "C"} ``` #### 方法 2:使用 `HashSet` 辅助(高性能) ```vb.net Dim uniqueSet As New HashSet(Of String) Dim resultList As New List(Of String) For Each item In originalList If uniqueSet.Add(item) Then ' 当元素首次出现时返回True resultList.Add(item) End If Next ``` #### 方法 3:自定义比较器(适用于复杂对象) ```vb.net ' 定义比较器 Public Class PersonComparer Implements IEqualityComparer(Of Person) Public Function Equals(x As Person, y As Person) As Boolean _ Implements IEqualityComparer(Of Person).Equals Return x.Id = y.Id End Function Public Function GetHashCode(obj As Person) As Integer _ Implements IEqualityComparer(Of Person).GetHashCode Return obj.Id.GetHashCode() End Function End Class ' 使用 Dim people = New List(Of Person) From {...} Dim uniquePeople = people.Distinct(New PersonComparer()).ToList() ``` #### 注意事项: 1. 对于基础类型(如 `String`, `Integer`),直接使用 `Distinct()` 即可 2. 自定义类型需实现 `IEquatable` 接口或提供 `IEqualityComparer` 3. 所有方法均会保留首次出现的元素位置 4. `List` 允许 `null` 值,但重复的 `null` 也会被移除[^2] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值