1

以下の例に示すように、特定のリストに番号が欠落している番号のリストを作成したかったのです。

既存のリスト{1,3、5、9、13、15}

結果リスト{2,4,6,7,8,10,11,12,14}

4

2 に答える 2

3

拡張TCLには、intersect3戻り値の1つとしてのリストを提供する関数がありA-Bます。あなたはあなたのリストをあなたのリストにまたがるすべての可能な数のリストと交差させることができます。

拡張TCLを使用しない場合は、自分で何かを実装する必要があります。

私はTCLをほとんど使用しないので、もっと良い方法があるかもしれませんが、基本的なアプローチは、リストを並べ替えてから、リストを実行して不足している値を見つけることです。

#!/usr/bin/tclsh

set A {1 3 5 9 13 15}

set A [lsort -integer $A]
set B {}
set x 0
set y [lindex $A $x]

while {$x < [llength $A]} {
    set i [lindex $A $x]
    while {$y < $i} {
        lappend B $y
        incr y
    }
    incr x
    incr y
}
puts $B

出力:

2 4 6 7 8 10 11 12 14
于 2013-01-14T21:14:42.170 に答える
1

水田の答えはかなり良さそうです。これは少し短く、リストがすでに並べ替えられていることを前提としています。

package require Tcl 8.5
set A {1 3 5 9 13 15}
set result [list]
for {set i [lindex $A 0]; incr i} {$i < [lindex $A end]} {incr i} {
    if {$i ni $A} {
        lappend result $i
    }
}

「ni」演算子については、http://tcl.tk/man/tcl8.5/TclCmd/expr.htm#M15を参照してください。

于 2013-01-15T02:37:10.150 に答える