1

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

现在包含一旦找到 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
4

2 回答 2

2

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

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

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 毫秒

于 2013-04-19T14:36:29.050 回答
1

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

这应该会快一些:

For Each item1 In arrLoList   
    If arrCoList.contains(item1) Then          
        For Each item2 In arrCoList               
            arrNewList.Add(item2)
        Next  
     End If
Next
于 2013-04-19T14:32:08.617 回答