###### tags: `C#` # C# Class 6 0729 :rocket: :rocket: :rocket: ## :memo: CH5. 方法與參數 ### 5-1: 認識方法 ### 5-2: 認識參數 ### 5-3: 認識同名方法 同名函式(overload)的參數需定義為不同 可能會導致偵錯困難,應盡量避免模糊不清的參數定義 ex:![](https://i.imgur.com/rmSHyYu.png) 優點:擴充性較佳 ex: ![](https://i.imgur.com/pnOOjLX.png) 新函式在定義時僅需多加一個參數即可,功能上線時也可兼容舊函式 缺點:維護性較差(偵錯困難,修改預設值不方便) --- ## :memo: CH6. 陣列與集合 有陣列 or集合即可跑迴圈,程式會比較好寫 陣列的變數要當作參考型態看待,建陣列時需要new(簡寫可不用new) $\Uparrow$ $\Uparrow$ $\Uparrow$ $\Uparrow$ $\Uparrow$ $\Uparrow$ ``` 建好的陣列是一個物件,無法直接透過Console.Writeline印出。 要使用override或是迴圈將陣列印出 ``` ### 6-1: 認識陣列 建立時是固定大小,可手動調整大小 型態相同的資料集合 不適合插入&刪除 ### 6-2: 建立陣列 二維陣列ex:float[,]=new float[12,31]$\Rightarrow$中間有逗點 存取陣列維度的上下限會引發IndexOutOfRange的例外(跑迴圈特別容易出現) 查詢陣列元素數目:使用length屬性 查詢陣列維度數目:使用GetLength方法 ![](https://i.imgur.com/ZaOejKr.png) ### 6-3: 使用陣列 調大小:使用resize(ref陣列,大小) IndexOf,LastIndexOf為線性(循序)搜尋,效率不好。適合陣列元素不多的場合 搜尋: 1.循序搜尋 2.二分搜尋 BianarySearch:***搜尋前須先排序*** Array.Sort會喪失原有陣列的順序 Lambda或LINQ敘述可保留原有順序 ### 6-4: 傳統集合,泛型(Generic)集合,與Thread-Safe 自動調整大小 適合插入&刪除 Boxing:將值型態轉換為參考型態 傳統集合(第一代) 泛型(第二代)=><型態>不需轉型,不會產生Boxing// 搜尋最快的方法==Dictionary=>元素型態:Key-Value Pair 執行緒安全Thread-Safe(第三代)=><型態>不需轉型,不會產生Boxing ### 6-5: 認識集合 ### 6-6: 使用集合 ![](https://i.imgur.com/4etfJ5c.png) --- > However, if you have a “need for speed” or are doing a heavy amount of query lookups, then if you need to search for a collection for a string: > **In the “key”, A Dictionary, ConcurrentDictionary, or Hashset are your best bets.** > > **In the “value”, you should use a SortedList, or convert to an array/normal List and do a binary search.** > > By all means, do not use LINQ. The performance difference can be summed up as follows: LINQ is like trying to melt butter with a match; whereas the top performers are akin to melting butter with a blowtorch. :rocket: :rocket: :rocket: