###### tags: `C#`
# C# Class 6 0729
:rocket: :rocket: :rocket:
## :memo: CH5. 方法與參數
### 5-1: 認識方法
### 5-2: 認識參數
### 5-3: 認識同名方法
同名函式(overload)的參數需定義為不同
可能會導致偵錯困難,應盡量避免模糊不清的參數定義
ex:
優點:擴充性較佳
ex:

新函式在定義時僅需多加一個參數即可,功能上線時也可兼容舊函式
缺點:維護性較差(偵錯困難,修改預設值不方便)
---
## :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方法

### 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: 使用集合

---
> 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: