1namespace ConsoleApplication1
2{3 using System;4 using System.Collections.Generic;5 using System.Linq;67 class Program
8{9staticvoidMain(string[] args)10{11 var rand = new Random();12 var listA = Enumerable.Range(0,10).Select((x, i)=> new ClassA(){ Key = new Guid(0,0,0,0,0,0,0,0,0,0,(byte)i), Name = i +"太郎"}).ToList();13 var listB = new List<ClassB>()14{15 new ClassB(){ Key = new Guid(0,0,0,0,0,0,0,0,0,0,(byte)0)},16 new ClassB(){ Key = new Guid(0,0,0,0,0,0,0,0,0,0,(byte)3)},17 new ClassB(){ Key = new Guid(0,0,0,0,0,0,0,0,0,0,(byte)5)},18 new ClassB(){ Key = new Guid(0,0,0,0,0,0,0,0,0,0,(byte)8)},19};20FunctionX(listA, listB);2122 Console.ReadKey();23}2425 public staticvoidFunctionX(List<ClassA> listA, List<ClassB> listB)26{27foreach(var c in listA.Except<ISample>(listB, ClassComarer.CompareAB))28{29 var a = c as ClassA;30 Console.WriteLine(a.Name);31}32}33}3435 public interface ISample
36{37 Guid Key { get;}38}3940 public class ClassA : ISample
41{42 public Guid Key { get; set;}43 public string Name { get; set;}44}4546 public class ClassB : ISample
47{48 private int field1;49 private double field2;50 public Guid Key { get; set;}51}5253 public class ClassComarer : IEqualityComparer<ISample>54{55 public static readonly ClassComarer CompareAB = new ClassComarer();5657 public bool Equals(ISample x, ISample y)58{59return x.Key == y.Key;60}6162 public intGetHashCode(ISample obj)63{64return obj == null ?0:1;65}66}67}
1//Pattern-A: Bの要素数がそれなりにある場合2public voidFunctionX(List<ClassA>listA, List<ClassB>listB)3{4 HashSet<Guid> set = new HashSet<Guid>(listB.Select(e => e.Key));5for(var element in listA.Where(e =>!set.Contains(e.Key))){6 Console.WriteLine(element.Name);7}8}910//Pattern-B: Bの要素数が少なくAの要素数もそれほどない場合11// (要素数が少ないという条件があるのでメソッド(関数)として作らないかもしれない)12foreach(var element in listA.Where(a =>!listB.Any(b => a.Key == b.Key))){13 Console.WriteLine(element.Name);14}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/11/27 11:33