且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

在TCL中比较两个列表的正确方法是什么?

更新时间:2023-01-22 22:09:26

如果我要实现 lequal proc,我从这开始:

If I were to implement an lequal proc, I'd start with this:

proc lequal {l1 l2} {
    foreach elem $l1 {
        if {$elem ni $l2} {return false}
    }
    foreach elem $l2 {
        if {$elem ni $l1} {return false}
    }
    return true
}

p>

And then optimize to this:

proc K {a b} {return $a}

proc lequal {l1 l2} {
    if {[llength $l1] != [llength $l2]} {
        return false
    }

    set l2 [lsort $l2]

    foreach elem $l1 {
        set idx [lsearch -exact -sorted $l2 $elem]
        if {$idx == -1} {
            return false
        } else {
            set l2 [lreplace [K $l2 [unset l2]] $idx $idx]
        }
    }

    return [expr {[llength $l2] == 0}]
}