星期四, 5月 29, 2008

[Boo]Boo(15)-內建函數:容器操作

join()、map()、array()、matrix()、iterator()、enumerate()、range()、reversed()、zip()、cat()

這一類的函式還...蠻多的,大多都與 python 相容。

join(),把 Enumerator 裡面每個元素轉成字串,最後串成一個字串傳回。你也可以加上第二個引數,他會自動幫你加上,例如:join( [1,2,3,4,5], ":" ) 會得到 "1:2:3:4:5" 的字串。
map(),對 Enumerator 裡面每個元素施行指定的函式。
array(),傳入一個 Enumerator 回傳一個陣列。
matrix(),建立多維陣列。
iterator(),取得物件的 IEnumerable 介面,如果物件沒有 IEnumerable 介面,但有繼承 TextReader 的話,則改用 TextReaderEnumerator.lines() 取得 IEnumerable。這個函數在內部非常頻繁地被這裡提到的其他函數使用到。
enumerate(),先取得物件的 IEnumerable 介面,然後傳回類似 (index, value ) 的 Enumerator,舉例來說,List( enumerate( [ "a", "b", "c", "d" ] ) ) 的結果會是:[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd')]。
range() 很容易理解,傳入數值,會回傳有循序數值的 Enumerator,你也可以傳入起始與結束的數值或是傳入起始、結束與遞增數。
reversed(),將 Enumerator 裡面的元素以相反順序擺放,內部是使用 ReversedListEnumerator 類別來完成這件事情。
zip(),傳入多個 Enumerator,它會把每個 Enumerator 的第 0 個元素放到一起、第 1 個元素放到一起...以此類推,最後再傳回一個 Enumerator。這個函數看例子會比較容易了解,array(zip(['a','b','c'],[4,5,6],['aa','bb','cc'])) 的結果會是 (('a', 4, 'aa'), ('b', 5, 'bb'), ('c', 6, 'cc'))。老實說,我還沒想到要怎麼用...
cat(),跟 join 有點像,不過不會傳回字串,而是把傳入的 Enumerator 串接起來成一個 Enumerator 再傳回。

這裡有的函數我沒舉例,要看例子的話,可以參考Boo Primer中文版對內建函數的說明

沒有留言: