發表文章

目前顯示的是 五月, 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{staticvoid 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)Console.WriteLine(kvp.Value);}}}

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),讓各種鴨子繼承此類別。

這個網誌中的熱門文章

DevOps:持續整合&持續交付(Docker、CircleCI、AWS)

Factory pattern 工廠模式

Mock Server&契約測試