發表文章

目前顯示的是 5月, 2009的文章

SortedDictionary如何自訂排序

之前再寫 資料檢索 這堂課的作業時,碰到一個 SortedDictionary 排序上的問題,因為我在寫 反轉索引法 的過程中有使用到這個集合,其中Key的部分我是用來存放 TF-IDF 演算法求出來的weight score,這個值我是以double的型態來存放,不過因為SortedDictionary的排序方式是由小到大,也就是以升冪排序的方式幫你排序好了,但是我希望它能夠由大到小排序,因為作業的顯示結果要求weight score越高的結果要排越前面,所以我上MSDN查了一下SortedDictionary的資料後,本來看到它有一個 Reverse 的方法,不過後來研究了好久還是不會用,最後就上PTT的C_Sharp板去求助,經過Cloud大大的指導後終於解決這個問題了。 利用SortedDictionary建構式的一個多載,IComparer介面就可以實現自訂排序方式,來看看實作程式碼吧。 我們先看一下一開始SortedDictionary為我們排序的結果: using System; using System.Collections.Generic;   namespace SortedDictionarySample { class Program { static void Main( string [] args) { SortedDictionary< int , string > sortedDictionary = new SortedDictionary< int , string >();   sortedDictionary.Add(5, "五" ); sortedDictionary.Add(4, "四" ); sortedDictionary.Add(6, "六" ); sortedDictionary.Add(2, "二" ); sortedDictionary.Add(8, "八" );   foreach (KeyValuePair< int , string > kvp in sortedDictionary) Consol

Strategy pattern 策略模式

這篇文章是我打算要寫的Design pattern系列中的第一篇,在我大學三年級的時候,修了系上開的視窗程式設計課程,開課教授也是我的專題指導教授,這堂課老師教了我們很多關於programming design pattern的觀念。  最近剛好也讀完了 O'REILLY出版的Head First Design Patterns(深入淺出設計模式) ,對於一些較常用的pattern也有了更加的了解,所以我希望能整理幾個比較入門的pattern來當作學習文章,如果有哪裡寫錯或是有疑問的,非常歡迎留言指教,大家一起學習。 什麼是design pattern(設計模式)呢? design pattern是 對軟體設計中普遍存在(反覆出現)的各種問題,所提出的解決方案 。 design pattern並不是直接用來完成程式碼的編寫,而是描述在各種不同情況下,要怎麼 解決問題的一種方案 。 演算法不能算是一種design pattern,因為演算法主要是用來解決計算上的問題,而非設計上的問題。 design pattern主要目的是避免會引起麻煩的程式緊密耦合,以增強軟體設計面對並適應變化的能力。 以上是引用 軟體設計模式-維基百科 的其中一段介紹,第一次接觸的人可以去看看相關內容。 接下來我們進入主題,第一篇要來介紹的pattern是 Strategy pattern (策略模式)。 Strategy pattern是指 物件本身有某些行爲(method),但是在不同的情況中,該行爲有不同的實現方式(演算法) ,找出程式中可能需要更動的地方,把它們個別封裝起來,就算演算法有變動,也不會影響到使用演算法的程式,舉個 維基百科 提供的例子,比如每個人都要「繳交個人所得稅」,但是「在美國繳交的個人所得稅」和「在台灣繳交的個人所得稅」就有不同的計算稅的演算法。 我們用 Head First Design Patterns 書上的鴨子範例來一步步解釋。 假設我們打算完成一個模擬鴨子的小程式,程式中可以模擬出各種不同類型的鴨子行為,例如游泳,呱呱叫等等的...。 這個時候我們會設計一個擁有這些行為的鴨子抽象類別(abstract class),讓各種鴨子繼承此類別。