這個系列我們看看c#中有哪些我們知道,但是又不知道怎麼用,又或者懶得去了解的東西,比如這篇我們要介紹的todictionary
和tolookup。

從圖中我們看到有四個toxxx的方法,其中toarray和tolist,我想大家用的是非常非常多,但是todictionary和tolookup
不見得有多少人用了,但不能否認的是這些方法确實很有用。
不多廢話了,直接如主題,我們有這樣的一個實體,包含:票号,訂單号,備注。
好了,我們看看需求,票号和訂單号是一對多的關系,也就是說一個訂單号可能包含幾個票号,每個票号都有自己對應的狀态,
比如票号有 “改簽”,"未使用",“成交”,"退票" 等等,下面我們灌一批資料進去。
舉個例子: 我需要統計各個訂單号中的票号情況。
很明顯,這是一個分組排序的問題,可能你馬上就想起了groupby來實作,當然groupby是可以實作的,不過groupby不能算是一種資料
結構,不能帶有索引,沒有字典那樣容易輸出和操作。
方案一: 采用普通的foreach循環。
一般情況下,可能有一部分人都采用這種原始的方法,将list資料通過foreach循環放到dictionary中,就是代碼寫的多一些,也算
是最靈活的。
方案二:使用todictionary
從圖中我們可以看到,發生悲劇的異常了,我們知道dictionary中key是不能重複的,然而todictionary中并沒有給我們做
key的重複值判斷,那也就側面說明todictionary在kv中隻能是 “一對一”的關系,也就是v中永遠隻會有一條記錄,顯然這不是
我需要的,在了解todictionary原理後,該方案失敗。
方案三: 使用tolookup
也許微軟知道客戶有這麼個需求,就采用了一個todictionary的加強版,你也可以認為是一種新的字典資料結構,它就避免了這
種“一對一”的關系,采用“一對多”的實作。
而且tolookup和字典一樣,是帶有索引形式,這個groupby就不具備了,當然tolookup還有一個強大的功能,就是使用
func<tsource, telement> elementselector來對現在的v元素進行轉換來避免我剛才 console.writeline("\t\t" + item1.
ticketno + " " + item1.description);語句