VBScript array_diff_uassoc 関数

ユーザが指定したコールバック関数を利用し、 追加された添字の確認を含めて配列の差を計算する


Function array_diff_uassoc(ByVal mAry1,ByVal mAry2,key_compare_func)

    Dim arr_dif
    set arr_dif = Server.CreateObject("Scripting.Dictionary")

    If Not isObject(mAry1) or Not isObject(mAry2) Then
        set array_diff_assoc = arr_dif : Exit Function
    End If

    Dim j,k,callback_ret
    For Each j in mAry1

        arr_dif.Add j, mAry1(j)

        For Each k In mAry2
            If mAry1(j) = mAry2(k) Then
                execute("callback_ret = " & key_compare_func & "(j,k)")
                If callback_ret = 0 Then
                    If arr_dif.Exists(j) Then arr_dif.Remove j
                ElseIf callback_ret < 0 Then
                    arr_dif.Remove j
                    If arr_dif.Exists(k) Then
                        arr_dif.Item( k ) = mAry2(k)
                    Else
                        arr_dif.Add k ,mAry2(k)
                    End If
                End If
            End If
        Next
    Next

    set array_diff_uassoc = arr_dif

End Function

引数

mAry1 = array 比較元の配列。
mAry2 = array 比較する対象となる配列。
key_compare_func = callback 使用するコールバック関数。 この関数は、1 つめの引数が 2 つめより小さい / 等しい / 大きい 場合にそれぞれ 負の数 / ゼロ / 正の数 を返す必要があります。

戻り値

mAry1 の要素のうち、 その他の配列のいずれにも含まれないものだけを残した配列を返します。

処理

・mAry1 を mAry2 と比較し、その差を返します。
・ユーザが指定したコールバック関数を用いて添字を比較します。

その他の PHP array 関数