LINQ
這個有點意思,叫做「語言整合查詢」(Language Integrated Query),可以在C#裡用類似sql的查詢方法,只要是列舉類都可以用這個。
/// 沒有 LINQ 的寫法
var result = new List<string>();
foreach (var f in files)
{
if (f.Contains(keyword))
result.Add(f);
}
/// 有 LINQ 的寫法
var result = files.Where(f => f.Contains(keyword)).ToList();
常用方法:
| 方法 | 作用 |
|---|---|
.Where() | 篩選(過濾條件) |
.Select() | 轉換(這個就是map,對每個元素執行自定函式操作) |
.FirstOrDefault() | 取第一個,沒有就返回 null |
.Any() | 有沒有符合條件的元素 |
.Count() | 計算數量 |
.OrderBy() | 排序 |
.ToList() / .ToArray() | 具體化結果 |
.ToHashSet() | 轉為雜湊Set(去重),元素可以給入去重規則 規則的型別需要是 IEqualityComparer<T> |
然後這裡的關鍵是,查詢的描述跟最終的執行是分開的,所以必須用 ToList() 或者是 ToArray() 立即執行,亦或者是需要的時候再調這個去執行。
List 跟 Array 大部分情況下差不多,但最大的不同就是前者可以隨時增減,而後者是固定的。如果是不會變動的場景,後者會比較合適,因為效能更高。而如果需要隨時增減,那就得用前者了。