2017-01-31 42 views
0

我想用一個數字來劃分整個列表。讓我說我拿一個變量$ Content,並且我想用300個節點來劃分下面的列表。 所以我取命令$內容/ 300用tcl中的單個號碼劃分列表NS-2

  1. $含量= {1 2 3 4 5} {2 3 4 5 6} {4 5 6 7 8 9} {3 4 6 8 9 0}

因此輸出結果{1 2 3 4 5} {2 3 4 5 6} {4 5 6 7 8 9} {3 4 6 8 9 0}/300,括號丟失和參數無效。

請告訴我,我們如何把所有表與單數(300個節點),因爲在大括號每個數字來作爲一些參數

+0

您希望從您嘗試執行的操作中獲得什麼輸出? –

+0

我想從這個列表中產生一些輸出。實際上$ Content包含了一些參數($ delay,$ range,$ priority),這個參數以list的形式產生了一些值。然後我們用總的節點數除。所以在這個輸出的基礎上,我會決定要麼我會選擇這個最好的轉發器或不.. –

+0

對不起,你對你想要實現什麼的解釋不清楚。正如我所說的,請給出您希望的輸出的**文字**例子。 –

回答

0

注意,Tcl是一個非常空白敏感的語言輸出,讓你在你的$ Content聲明中需要關閉和打開大括號之間的空格。

可以遍歷$內容,併爲每個子表,遍歷元素和除以300,收集結果:

set Content {{1 2 3 4 5} { 2 3 4 5 6} { 4 5 6 7 8 9} {3 4 6 8 9 0}} 
# note the spaces ......^............^..............^ 
set divisor 300 
set newContent [list] 
foreach sublist $Content { 
    set newSublist [list] 
    foreach elem $sublist { 
     lappend newSublist [expr {$elem * 1.0/$divisor}] 
    } 
    lappend newContent $newSublist 
} 
puts $newContent 

輸出是

{0.0033333333333333335 0.006666666666666667 0.01 0.013333333333333334 0.016666666666666666} {0.006666666666666667 0.01 0.013333333333333334 0.016666666666666666 0.02} {0.013333333333333334 0.016666666666666666 0.02 0.023333333333333334 0.02666666666666667 0.03} {0.01 0.013333333333333334 0.02 0.02666666666666667 0.03 0.0} 

如果您的Tcl版本8.6你可以使用lmap命令,以縮短了代碼:

set newContent [lmap sublist $Content { 
    lmap elem $sublist {expr {$elem * 1.0/$divisor}} 
}] 

請注意,我乘以1.0以便使用浮點除法而不是整數除法。

+0

非常感謝您的回覆@Glenn Jackman先生。實際上,$ content包含一些基於這些參數的參數($ delay $ range $ priority $ i)$ content自動生成4元組{1 2 3 4} {5 6 7 8}列表,我們用列表中的數字爲了做出一些決定,要麼選擇最好的代理商。 set no_cs [llength expr {[$ Content]/$ num_nodes}] $ Content/$ num_nodes .output給我的錯誤(無效的參數,它應該是長度列表。)現在你告訴我可能的解決方案或提示爲了查看上面的代碼 –

+0

格倫傑克曼我運行你的代碼,但不幸的是「」它給了我錯誤 不能使用非數字字符串作爲操作數的「*」 而執行 「expr {$ elem * 1.0/$ divisor } 「 ( 」的foreach「 體線2)從 中調用 」的foreach ELEM $子列表{ lappend newSublist [EXPR {$ ELEM * 1.0/$除數}] }「 」「」 現在請告訴我什麼我呢? –

+0

你可以des cribe究竟是什麼意思「劃分一個列表300」?我的假設是否正確,你想將列表中的每個數字除以300? –