Visual_Basic 板


LINE

※ 引述《aabcd2 (很無聊ing~)》之銘言: : 我想從陣列中 把其中非零的值抓出來存到其他變數中 : 然後做運算 : 該怎麼寫比較好 : 有沒有比較簡單的方法呢 當然有! .net程式可以使用 "委任" 函數,將重覆工作的主要部份交給它執行. 不過,寫起來不見得是簡單,只是概念上較簡單. 如果你有一個 List(Of Integer) ,其中可以使用一個方法叫做 FindAll(match As Predicate(Of Integer)) As List(Of Integer) 給一個條件當作參數 match, 它就幫你找到所有符合此條件的項目, 這些項目是另一個 List(Of Integer). 參數 match 是一個 Predicate(Of Integer), 顧名思義, 它是一個函數, 對一個整數做判斷,然後傳回判斷結果. 試試看,開啟一個 console application 專案,在主程式中寫: Dim a As New List(Of Integer) Dim p As New Predicate(Of Integer)(AddressOf ______) Dim i As Integer a.Add(1) a.Add(0) a.Add(2) a.Add(3) a.Add(0) For Each i In a.FindAll(p) Console.Write("{0} ", i) Next Console.ReadLine() 先做好 List a 與 Predicate p, 然後呼叫 a.FindAll(p) 就會得到答案. 不過, Predicate p 是個什麼東西還沒寫出來,所以上面在 AddressOf 右邊打底線, 那個位置應該填一個函數名稱,函數的型態是 f(a As Integer) As Boolean. (predicate就是一個判斷式,對一些參數做判斷,傳回 Boolean 值) 在此想要的函數是判斷一個數字是不是 0, 所以將上例第二行改為: Dim p As New Predicate(Of Integer)(AddressOf NotZero) 於是要定義一個名叫 NotZero 的函數: Function NotZero(ByVal a As Integer) As Boolean Return a <> 0 End Function 然後執行一下, a 是 {1,0,2,3,0}, a.FindAll(p) 則是 {1,2,3}. 這是較高階的方法,[對 Predicate p 一般稱作 Call-By-Name 或 Call-By-Need.] 另外, List(Of Integer) a 有一個 ForEach 方法為: Sub ForEach(action As Action(Of Integer)) 是對 a 的每個項目執行指定的程序 action. Action(Of Integer) 接受一個整數,然後做一個動作. 還有一個方法叫 ConvertAll: ConvertAll(conv As Converter(Of TInput, TOutput)) As List(Of TOutput) 是把一個函數 conv 套用到 a 的每個項目. --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.231.64.34 ※ 編輯: yauhh 來自: 61.231.64.34 (07/03 06:15)
1F:→ yauhh:p.s. 要使用這個特點, .net framwork版本要高一點 07/03 06:24
2F:→ yauhh:抱歉講了錯誤的事,在此的函數委派本身不叫call-by-name 07/03 18:21
※ 編輯: yauhh 來自: 218.160.114.186 (07/03 18:23)
3F:→ aabcd2:感謝你 我會試試看的 07/04 02:23







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Gossiping站內搜尋

TOP