【问题标题】:IsEqual object available in VBScript for the ArrayList classes?IsEqual 对象在 VBScript 中可用于 ArrayList 类吗?
【发布时间】:2012-12-24 07:07:40
【问题描述】:

请找到以下代码:

Option Explicit
Dim TempArr
Dim ArrListChildDetails :  Set ArrListChildDetails = CreateObject("System.Collections.ArrayList")

现在我已经为它分配了一些 Range 对象:

ArrListChildDetails = ob3.Cells(ParentMatchRowNum,Width+1).Resize(, UBound(TempArr, 1) + 1)
TempArr=ArrListChildDetails.ToArray()   
ArrListChildDetails .Sort();

现在是否可以比较两个数组,如果它们的元素相同且位置相同并且计数也相同?表示任何 IsEql() 在 ArrayList 类中可用?

【问题讨论】:

    标签: excel vbscript wsh vba


    【解决方案1】:

    快速而肮脏的解决方案,但在大多数情况下就足够了:

    WScript.Echo Join(ArrListChildDetails.ToArray(),"|") = Join(ArrListChildDetails2.ToArray(),"|")
    

    编辑:一些解释:比较两个 ArrayLists(或两个数组),转换为一个数组并将它们连接到一个字符串中,该字符串由数组中未使用的一些特殊字符分隔,然后比较字符串,当然这只是可用于具有可以字符串化的值类型的一维数组。如果它们具有相同数量的相同内容的元素,则比较将返回 -1 (true) 和 0 (false) 否则

    【讨论】:

    • 如果两者相同,这是否返回True?在Matching 期间,它会检查所有elements,their positions and total count 吗?
    • 你能告诉它是否返回“true”,两个对象何时相等,否则false
    • 感谢采纳,比较对象(是指同一个对象的标识符)是通过ArrayList类的.equals方法,这里的解决方法是看两个ArrayList的内容是不是一样
    • 你能在我下面的帖子中帮助我吗? stackoverflow.com/questions/14030365/…
    • 真的卡在那个帖子里了!
    【解决方案2】:

    我不知道你从哪里得到 IsEqual(),但你可以使用 ArrayList/Object 方法 .Equals() 来确定一个 ArrayList 是否被另一个名称/变量引用(参见 VBScript 的 Is 运算符)。

    要检查两个不同 ArrayList 的计数、顺序和元素是否相等,您必须滚动自己的函数。为了让您开始:

    Option Explicit
    
    Dim alA  : Set alA  = CreateObject("System.Collections.ArrayList")
    Dim alB  : Set alB  = CreateObject("System.Collections.ArrayList")
    Dim alC  : Set alC  = CreateObject("System.Collections.ArrayList")
    Dim alA2 : Set alA2 = alA
    
    alA.Add "one"
    alA.Add "two"
    
    alB.Add "one"
    alB.Add "two"
    
    alC.Add "one"
    alC.Add "owt"
    
    WScript.Echo "alA: ", Join(AlA.ToArray())
    WScript.Echo "alA2:", Join(AlA2.ToArray())
    WScript.Echo "alB: ", Join(AlB.ToArray())
    WScript.Echo "alC: ", Join(AlC.ToArray())
    
    WScript.Echo "alA.Equals(alA2):", CStr(alA.Equals(alA2))
    WScript.Echo "alA.Equals(alB):" , CStr(alA.Equals(alB))
    WScript.Echo "alA.Equals(alC):" , CStr(alA.Equals(alC))
    
    WScript.Echo "ALEqual(alA, alA):", CStr(ALEqual(alA, alA))
    WScript.Echo "ALEqual(alA, alA2):", CStr(ALEqual(alA, alA2))
    WScript.Echo "ALEqual(alA, alB):", CStr(ALEqual(alA, alB))
    WScript.Echo "ALEqual(alA, alC):", CStr(ALEqual(alA, alC))
    
    Function ALEqual(alL, alR)
      ALEqual = True
      If alL Is AlR Then Exit Function
      ALEqual = alL.Count = alR.Count
      If ALEqual Then
         Dim i
         For i = 0 To alL.Count - 1
             If alL(i) <> alR(i) Then
                ALEqual = False
                Exit Function
             End If   
         Next
      End If  
    End Function
    

    输出:

    alA:  one two
    alA2: one two
    alB:  one two
    alC:  one owt
    alA.Equals(alA2): Wahr
    alA.Equals(alB): Falsch
    alA.Equals(alC): Falsch
    ALEqual(alA, alA): Wahr
    ALEqual(alA, alA2): Wahr
    ALEqual(alA, alB): Wahr
    ALEqual(alA, alC): Falsch
    

    【讨论】:

      猜你喜欢
      • 2011-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 2011-05-14
      • 1970-01-01
      相关资源
      最近更新 更多