2017-01-29 9 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 개까지)을 실제적으로 어떻게 비교할 수 있습니까?

비교할 기계가 두 개인 경우 (예 : Distinct 사용) 쉽게 모든 목록을 하나와 비교할 수 있습니다. 그러나 동시에 모든 것을 비교할 수있는 방법이 있습니까?

+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>에 해당 로직을 구현하면 사용자가 설정됩니다.