7

配列を定義し、TCLで配列を表示してループするのに助けが必要です。

これが私がphpでそれらを行う方法です。

$date =array();
$size=0;
$date[$size] =$pre_event_date;
/* After doing some manpulation and calculations with $size */
for($i=0;$i<=$size;$i++){
    echo $date[$i];
}

tclでも同じことをしたいのですが、次のコードは適切ですか?

set size 0
set date[$size] $pre_event_date
#After performing some manipulation
for {set i 0} { $i <=$size } {incr i} {
    puts "$date[$i]";
}

また、set$dateを配列として定義できますか。のようなもの:

set date array();

そこで、コードを編集して、RSeegerの配列実装を使用して簡単なテストを試みました。

set date(0) 35
set date(1)  40
foreach key [array names date]{
   puts "${key}=$date($key)"
}

上記は何も返しません。おそらくエラーがあります。私も試しました:引用符なしで$ date($ key)を置きますが、それも機能しません。

4

3 に答える 3

9

番号(コードが意味する)でインデックスを作成する場合は、を使用しlistます。これは、Cの配列に類似しています。

set mylist {}
lappend mylist a
lappend mylist b
lappend mylist c
lappend mylist d
foreach elem $mylist {
    puts $elem
}
// or if you really want to use for
for {set i 0} {$i < [length $mylist]} {incr i} {
    puts "${i}=[lindex $mylist $i]"
}

array文字列でインデックスを作成する(またはリストがまばらな)場合は、key->valueのハッシュマップであるを使用できます。

set myarr(chicken) animal
set myarr(cows) animal
set myarr(rock) mineral
set myarr(pea) vegetable

foreach key [array names myarr] {
    puts "${key}=$myarr($key)"
}
于 2012-04-15T20:39:21.950 に答える
6

Tclでは、配列の概念は他の多くのプログラミング言語とは異なり、Tclが配列と呼ぶものは、他の場所ではハッシュマップまたは連想配列と呼ばれることがよくあります。配列インデックスは整数に限定されませんが、任意の有効な文字列にすることができます。ほとんどの場合、データ操作に配列の代わりにリスト(またはリストのリスト)を使用しています。リスト全体または配列をループするには、コマンドforeachを使用できます。

foreach {index content} [array get date] {
    put $index: $content
}

値を設定する前に配列を初期化する必要はありません。メンバーの追加を開始するだけです。個々の配列メンバーは、次のように参照されます。

 $array($key) or $array("abc")

Tclには多次元配列はありませんが、たとえば、一貫したキー名を使用することでシミュレートできます。

set a(1,1) 0
set a(1,2) 1
...

それ以外は、ほとんど優れたTcl wikiを紹介します。ここでは、ほとんどのコンテンツが繰り返されているとは思えないので、構文の問題については配列ページ配列manページを参照してください。

于 2012-04-15T20:22:06.550 に答える
3

TCL配列は、Pythonがdictと呼ぶもの、およびPerlのハッシュに近いものです。したがって、インデックスをインデックス整数ではなくキーストリングと考えると役立ちます。

set groceries(fruit) "banana"
set groceries(1) "banana"

配列関数を使用して、すべてのキーのリストを生成するなどの便利なことを実行できます。また、必要に応じて、そのリストを反復処理できます。たとえば、キーのリストを生成してから、 llengthを使用して配列サイズを取得できます。

これは、それらを見つけるために一意のインデックスが必要な場合に最適に機能します。順序付きリストが必要な場合は、lappendなどの実際のリスト関数を使用した方がよい場合があります。

于 2012-04-15T20:22:50.427 に答える