teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

修正

2019/03/15 07:31

投稿

papinianus
papinianus

スコア12705

answer CHANGED
@@ -68,8 +68,7 @@
68
68
  return false;
69
69
  if (s1.Name == s2.Name && s1.ModifiedAt == s2.ModifiedAt)
70
70
  return true;
71
- else
72
- return false;
71
+ return false;
73
72
  }
74
73
 
75
74
  public int GetHashCode(SampleClass s)

1

ついき

2019/03/15 07:31

投稿

papinianus
papinianus

スコア12705

answer CHANGED
@@ -13,4 +13,73 @@
13
13
  * sampleからprevを名前だけ見て除く→増えたものが分かる
14
14
  * prevとsampleの名前だけ見たIntersectから、prev(sample)を名前と時刻を見て除く→時刻がかわったものが取れる
15
15
 
16
- という感じでどうでしょうか。
16
+ という感じでどうでしょうか。
17
+
18
+ ---
19
+ ```csharp
20
+ using System;
21
+ using System.Collections.Generic;
22
+ using System.Linq;
23
+ using System.IO;
24
+
25
+ namespace ConsoleApp
26
+ {
27
+ class Program
28
+ {
29
+ static void Main(string[] args)
30
+ {
31
+ var targetDir = new DirectoryInfo("./watching");
32
+ var fileT0 = targetDir.EnumerateFiles().Select(x=> new SampleClass() {Name = x.FullName, ModifiedAt = x.LastAccessTime }).ToArray();
33
+ var fileT1 = targetDir.EnumerateFiles().Select(x => new SampleClass() { Name = x.FullName, ModifiedAt = x.LastAccessTime }).ToArray();
34
+ var removed = fileT0.Except(fileT1).ToArray();
35
+ var added = fileT1.Except(fileT0).ToArray();
36
+ var modified = fileT0.Intersect(fileT1).Except(fileT1,new SampleClassEqualityComparer()).ToArray();
37
+ Console.ReadKey();
38
+ }
39
+ }
40
+ class SampleClass : IEquatable<SampleClass>
41
+ {
42
+ public string Name { get; set; } = string.Empty;
43
+ public DateTime ModifiedAt { get; set; } = default(DateTime);
44
+
45
+ public override bool Equals(object obj)
46
+ {
47
+ return Equals(obj as SampleClass);
48
+ }
49
+
50
+ public bool Equals(SampleClass other)
51
+ {
52
+ return other != null &&
53
+ Name == other.Name;
54
+ }
55
+
56
+ public override int GetHashCode()
57
+ {
58
+ return 539060726 + EqualityComparer<string>.Default.GetHashCode(Name);
59
+ }
60
+ }
61
+ class SampleClassEqualityComparer : IEqualityComparer<SampleClass>
62
+ {
63
+ public bool Equals(SampleClass s1, SampleClass s2)
64
+ {
65
+ if (s2 == null && s1 == null)
66
+ return true;
67
+ if (s1 == null || s2 == null)
68
+ return false;
69
+ if (s1.Name == s2.Name && s1.ModifiedAt == s2.ModifiedAt)
70
+ return true;
71
+ else
72
+ return false;
73
+ }
74
+
75
+ public int GetHashCode(SampleClass s)
76
+ {
77
+ var hashCode = -22583235;
78
+ hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(s.Name);
79
+ hashCode = hashCode * -1521134295 + s.ModifiedAt.GetHashCode();
80
+ return hashCode;
81
+ }
82
+ }
83
+
84
+ }
85
+ ```