用Linq排除已存在另一份清單中的資料並去掉重複項目

  • 6560
  • 0

用Linq排除已存在另一份清單中的資料並去掉重複項目

dotBlog 的標籤: ,,

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,【在這個案例】真的是脫褲子放屁,不過也許有些案例是必須這麼做,有空再來想想。

--------
沒什麼特別的~
不過是一些筆記而已