通过数组字符串列表为每个循环嵌套的效率

时间:2013-04-19 14:28:30

标签: vb.net string arraylist performance

遇到问题。效率。我对编码的效率知之甚少,但我正在学习。通过这些字符串的arraylists搜索item1,并在找到时将item2添加到新的arrayList中。逻辑很棒。工作良好。但由于arrCoList中的arrLoList * 10 000个元素中有700个元素,因此大约需要30-40秒。

现在包含一旦找到item1就会丢失,所以我无法真正改进。是否有助于在arrCoList的字符串末尾删除一些字符?

我怎么能改善这个?我想从arrayLists改变?

For Each item1 In arrLoList             
        For Each item2 In arrCoList

            If arrCoList.contains(item1) Then

                arrNewList.Add(item2)


            Else
                intCouldntfind += 1     'not finding 7 million 

            End If

2 个答案:

答案 0 :(得分:2)

首先,我不会使用旧的ArrayList,它总是需要将对象装箱/取消装箱到它们的实际类型(string这里)。相反,我会使用强类型List(Of String)

其次,您可以使用Enumerable.Except获取设置差异,因为它在内部使用HashSet非常有效。

Dim sw = New System.Diagnostics.Stopwatch ' measure time 
Dim rnd As New Random ' create random strings
Dim loList = New List(Of String)(700)
Dim coList = New List(Of String)(10000)

' initialize with sample data
For i = 1 To 700
    loList.Add(String.Format("Item: {0} Random-Value: {1}", i, rnd.Next(1, 1000)))
Next
For i = 1 To 10000
    coList.Add(String.Format("Item: {0} Random-Value: {1}", i, rnd.Next(1, 1000)))
Next

sw.Start()

' *** Here is all you need: '
Dim newList = loList.Except(coList).ToList()

sw.Stop()

结果: 3毫秒最大

答案 1 :(得分:1)

你正在做一个不必要的嵌套:

这应该快得多:

For Each item1 In arrLoList   
    If arrCoList.contains(item1) Then          
        For Each item2 In arrCoList               
            arrNewList.Add(item2)
        Next  
     End If
Next