怎样三个listview之间的相同内容保留下来呢
要求考虑运行效率使用函数方法。

解决方案 »

  1.   

    相同内容保留在新的listview里
      

  2.   

    1)先将3个listview排序
    2)用 While 语句 i 变量对 ListView1 进行循环
      a) 循环删除 ListView1、ListView2 各自第 i 个项目较小的一个,一直到两个项目相同
      b) 循环删除 ListView1、ListView3 各自第 i 个项目较小的一个,一直到两个项目相同
      c) i = i+1
    3)删除 ListView2、ListView3 比 ListView1 项目个数多的部分(即大于 ListView1 最大项目的部分)
      

  3.   

    有没有listviw1,listview2,listiew3的数据传输到相应数组里,然后,循环比较各个数据里的相同数据呢
    如  A=B=C 这样的ABC数组比较方法
      

  4.   

    我5楼的方法考虑不周,改进一下:
    2)用 While 语句 i 变量对 ListView1 进行循环 
      如果 ListView1、ListView2、ListView3 的第 i 个项目相同
        i = i+1
      否则
        在(ListView1、ListView2、ListView3 的第 i 个项目)中只保留最大的,其他删除
      

  5.   

    每次比较要么保留3个相同项、要么至少删除一个小项,最多比较次数为3个listview的项目数之和。
    只有一遍遍历。
      

  6.   

    还要考虑运行效率,ListView1、ListView2、ListView3的数据存储到数组里,然后,用循环或函数方法比较过程。  直接ListView1、ListView2、ListView3循环比较不太明智了
      

  7.   

    写数组肯定是不对的,写数组要遍历3个ListView,另外当数据过多的时候内存消耗过巨'如果index也相同,只有一次遍历
    for i = 1 to Lvw1.ListItem.Count
    if lvw2(i) == lvw1(i) and lvw3(i) == lvw1(i) then
    else
     delete lvw1(i) lvw2(i) lvw(3)
    end if
    next
    'index不同
    '除了遍历以外,没想到有什么办法
      

  8.   

    不见得
    1)ListView 可能存在多列,判断相同可能需要多个值比较,用数组存储不见得方便
    2)关键是找到的相同项不是用来输出,而是用来保留 ListView 的内容。如果不直接操作 ListView 就需要记录哪些项目该删除、哪些要保留,不见得方便。
      

  9.   

    Option Explicit'比较两个项目,返回 -1:<, 0:=, 1:>
    Private Function CompareItem(ByVal item1 As ListItem, ByVal item2 As ListItem) As Integer
        '这里简单地用了字符串比较,可以用其他规则进行比较
        CompareItem = StrComp(item1.Text, item2.Text)
    End FunctionPrivate Function Min(ByVal v1 As Long, ByVal v2 As Long, ByVal v3 As Long) As Long
        Dim v As Long
        v = IIf(v1 <= v2, v1, v2)
        Min = IIf(v <= v3, v, v3)
    End FunctionPrivate Sub Command1_Click()
        '保证3个ListView已排序
        
        Dim list1 As ListItems, list2 As ListItems, list3 As ListItems
        Dim i As Long
        Set list1 = ListView1.ListItems
        Set list2 = ListView3.ListItems
        Set list3 = ListView2.ListItems
        
        i = 1
        While (i <= list1.Count) And (i <= list2.Count) And (i <= list3.Count)
            Select Case CompareItem(list1(i), list2(i))
                Case -1
                    list1.Remove i
                    
                    Select Case CompareItem(list2(i), list3(i))
                        Case -1
                            list2.Remove i
                        Case 0
                        
                        Case 1
                            list3.Remove i
                    End Select
                Case 0
                    Select Case CompareItem(list1(i), list3(i))
                        Case -1
                            list1.Remove i
                            list2.Remove i
                        Case 0
                            i = i + 1
                        Case 1
                            list3.Remove i
                    End Select
                Case 1
                    list2.Remove i
            
                    Select Case CompareItem(list1(i), list3(i))
                        Case -1
                            list1.Remove i
                        Case 0
                        
                        Case 1
                            list3.Remove i
                    End Select
            End Select
        Wend
        
        i = Min(list1.Count, list2.Count, list3.Count)
        While list1.Count > i
            list1.Remove list1.Count
        Wend
        While list2.Count > i
            list2.Remove list2.Count
        Wend
        While list3.Count > i
            list3.Remove list3.Count
        Wend
    End Sub