用Linq排除已存在另一份清單中的資料並去掉重複項目
ARCI 表中,我要和負責設計、開發的人員面談,所以要排除 Inform 成員。因為成員在不同的工作包中,可能擔任不同角色,所以一開始串起來的清單中,會有重複的名稱出現,所以要排除重複出現的成員。換言之,最後留下來的清單中,應該只會排除純 Inform 角色的成員,且重複的名稱只會留下一筆:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace LinqExceptPractice { internal class Program { private static void Main(string[] args) { //取得團隊所有成員,但是要排除 Inform 成員,還要排除重複。 Console.WriteLine("方法1 **************"); var Way1 = (from tm in GetTeamMembers() where !GetInformUsers().Contains(tm) select tm).Distinct(); OutputListContent<string>(Way1); Console.WriteLine("自動 Distinct() 的 方法2 **************"); //var Way2 = (GetTeamMembers().Except(GetInformUsers())).Distinct(); var Way2 = GetTeamMembers().Except(GetInformUsers()); OutputListContent<string>(Way2); Console.WriteLine("脫褲子放屁的 方法3 **************"); var Way3 = GetTeamMembers().Except(from tm in GetTeamMembers() from iu in GetInformUsers() where tm == iu select tm); OutputListContent<string>(Way3); } public static List<string> GetInformUsers() { List<string> InformUsers = new List<string> { "黃金鼠", "鋼鐵牛", "火爆虎" }; return InformUsers; } public static List<string> GetTeamMembers() { List<string> TeamMembers = new List<string> { "黃金鼠", "鋼鐵牛", "火爆虎", "靈活兔","神速馬", "鋼鐵牛", "天空龍", "喜羊羊", "天空龍", "機智蛇", "機智蛇", "神速馬"}; return TeamMembers; } public static void OutputListContent<T>(IEnumerable<T> users) { foreach (var u in users) { Console.WriteLine(u); } } } }
我個人寫的時候,是寫方法 1,後來發現方法 2 更簡單,但是方法 2 我這次寫文章時,才發現加不加 Distinct() 結果相同(都會 Distinct),但是我不了解為什麼,有專家可以告訴我原因嗎?至於方法 3,【在這個案例】真的是脫褲子放屁,不過也許有些案例是必須這麼做,有空再來想想。
--------
沒什麼特別的~
不過是一些筆記而已