1class Flags
2{3// フラグは別にenumのフラグ合成でもなんでもいいけど…数字のゼロがフラグ合成しにくいから4 public bool Zero { get; set;}5 public bool One { get; set;}6 public bool IsValid { get {return Zero && One;}}7 public voidSetFlag(int flag)8{9if(flag ==0) Zero = true;10elseif(flag ==1) One = true;11}12}1314class Csv
15{16 public int Number { get; set;}17 public int Flag { get; set;}18}1920IDictionary<int, Flags>Import()21{22// ... 後を考えればキーでソート済みにしたい23 var dictionary = new SortedDictionary<int, Flags>();2425foreach(Csv csv .../* CsvHelperから取得 */)26{27 Flags flags;28if(!dictionary.TryGetValue(csv.Number, out flags))29{30 flags = new Flags();31 dictionary.Add(csv.Number, flags);32}33 flags.SetFlag(csv.Flag);34}3536return dictionary;37}3839voidCheck(IDictionary<int, Flags> results)40{41foreach(var result in results)42{43 Console.WriteLine($"Number: {result.Key} IsValid: {result.Value.IsValid}");44}45}
1using System;2using System.Linq;34public class Test
5{6 public staticvoidMain()7{8 var source = new[]{9 new Element{Number =1000,Flag =0},10 new Element{Number =1000,Flag =1},11 new Element{Number =1001,Flag =0},12 new Element{Number =1001,Flag =1},13 new Element{Number =1002,Flag =0},14 new Element{Number =1002,Flag =0},15 new Element{Number =1002,Flag =1},16 new Element{Number =1003,Flag =0},17 new Element{Number =1003,Flag =1},18 new Element{Number =1003,Flag =1},19 new Element{Number =1004,Flag =0},20 new Element{Number =1005,Flag =0},21 new Element{Number =1005,Flag =1},22 new Element{Number =1006,Flag =0},23};2425 var group = source.Distinct().GroupBy(e => e.Flag, e => e.Number);26 var ones = group.Where(g => g.Key ==1).SelectMany(x => x);27 var zeros = group.Where(g => g.Key ==0).SelectMany(x => x);28 var whole = group.SelectMany(x => x);2930 var ok = ones.Intersect(zeros);31 var ng = whole.Except(ok);323334 Console.WriteLine("==========ok===========");35foreach(var x in ok)36 Console.WriteLine(x);3738 Console.WriteLine("==========ng===========");3940foreach(var x in ng)41 Console.WriteLine(x);4243}44}4546public structElement47{48 public int Number;49 public int Flag;50}