2017-01-29 4 views
1

List<FileInfo>のプロパティを持つマシンのリストがあります。ここにその定義があります。複数のリストを比較して同じデータを格納する

internal class Machine 
{ 
    internal string MachineName { get; set; } 
    internal List<FileInfo> Files { get; set; } 

    internal Machine(string machine) 
    { 
     this.MachineName = machine; 
     this.Files = new List<FileInfo>(); 
    } 

    public override string ToString() 
    { 
     return string.Format("Machine - {0}", this.MachineName); 
    } 
} 

コードは私のネットワーク上のサーバからリストを移入し、彼らは、私がそれらについて知っておく必要がない場合は、各サーバーは、同じバージョンと同一のファイルを持っている必要があります。

C#を使用して複数のFilesのリスト(実際には最大4つまで)を実際に比較するにはどうすればよいですか?

比較するマシンが2つしかない場合(たとえばDistinctを使用)、実際にすべてのリストを1つと比較することは簡単です。しかし、同時にすべてを比較する方法はありますか?

+0

この質問は、あなたがしたいことが完全にはっきりしていないので、答えが少し難しいです。しかしながら;あなたがlinqを使用することができますが、それを比較するために何かが必要なものの任意のリストを比較したい場合。あなたは何を比較して正確に探していますか?比較ロジックを示すコードを簡単に送信できますか?そこから、リストを比較するために使用するロジックを提供できると思います。 –

答えて

1

Enumerable.GroupByをご覧ください。

var areAllIdentical = machines.SelectMany(m => m.Files) 
           .GroupBy(f => f, myComparer) 
           .All(g => g.Count() == n); 

myComparerがある:

あなたがする必要があるのはFileInfoでファイルリスト(SelectMany)、グループを平らにし、すべてのグループが、nは、あなたがマシンの数を確認しているされているnファイルがあることを主張していますグループ化するときにおそらくFileInfoの独自の等価ロジックを実装する必要があるからです。デフォルトの動作はほとんどあなたの要件を満たしていない可能性が高い、今すぐチェックアウトすることはできませんが、私の推測はその参照平等です。

2つの要素を同じに見なすにはどうすればよいですか?同じファイル名、最後に書き込まれた日付など?そのロジックをカスタムIEqualityComparer<FileInfo>に実装すると、設定されます。

関連する問題