2010-01-06 2 views
11

별개의 항목 목록과 수를 복사 : HashSet내가 걱정하는 많은 특성 만 두를 가진 개체가있는 한

int
myobject.Names입니다

myobject.ID

List<myobject> 

내가 Linq에이 정도 들어갈 때 사용 : 그럼이 비슷한 보이는 그 물체의 List이 있습니다 내가 중계기에 데이터를 보내지 만 이름 목록을 얻는 방법과 표시되는 빈도를 모르겠습니다.

데이터를 순환하지 않으려면 Linq를 사용하고 싶습니다.

내 태그가 표시되어야하므로 C#을 사용하는 ASP.NET 솔루션입니다.

일부 설명 :
내가 내 목록에서 단지 세 가지 항목이 있다고 가정하자 : 항목 1 존, 프레드, 잭이 그 이름에있다. 항목 2에는 이름에 John, Fred, Joe가 있습니다. 항목 3에는 이름에 John이 있습니다.

내가 돌아하려고 다음 존 - 내 개체에 대한 내 자신의 비교자를 작성하지 익숙 메모로 또한 1

, - 3 프레드 - 2 잭 - 1 조 , 나는 단지 내 생각에 전체적인 해결책을위한 '방법'을 놓치고 있습니다.

+1

안녕하세요, "이름 목록을 얻는 방법 및 표시 빈도"라고 말하면 : '.Names 속성에 유효한 목록 (HashSet)에 대한 포인터가 들어있는 List 의 myobject 인스턴스 수를 계산 하시겠습니까? 즉, '.Names 속성의 값이 null이 아닙니까? 또는 '.Names 속성에 유료 HashSet이 포함 된 myObject의 새 컬렉션을 만들고 싶습니까? 조금만 설명해주세요. – BillW

+0

설명이 추가되었습니다. –

답변

18

다음은 사용자가 해결하려고하는 문제를 이해하는 방법입니다. myobject의 목록이 있습니다. 각 myobjectNames이라는 이라는 속성을 가지며 strings (즉, HashSet<string>)입니다. myobject.Names에 나타나는 각 string이 모두 myobject.Names에 나타나는 횟수를 계산하려고합니다. 즉, 세 가지 myobject.Names

"Alice", "Bob", "Charlie" 
"Alice", "Bob", "Donald" 
"Alice", "Donald", "Ernie" 

이, 그리고 당신은 그렇다면

"Alice", 3 
"Bob", 2 
"Charlie", 1 
"Donald", 2 
"Ernie", 1 

를보고 싶어 :

var query = list.SelectMany(x => x.Names) 
       .GroupBy(s => s) 
       .Select(g => new { Name = g.Key, Count = g.Count() }); 

foreach(var result in query) { 
    Console.WriteLine("Name: {0}, Count: {1}", result.Name, result.Count); 
} 

내가 여기에 어떤 역할을 myobject.ID 표시되지 않습니다. 자격을주십시오.

+0

myobject.ID는 실제로 역할을 수행하지 않습니다. 단지 단순한 HashSet 객체가 아니라는 것을 분명히하고 싶었습니다. –

+0

오케이. 그럼 위의 질문에 대한 답변을 믿습니다. 설명이 필요한 것이 있으면 알려주세요. – jason

+1

예가 GroupBy (s)이지만 s가 존재하지 않습니다. –

5
var query = yourList 
      .SelectMany(x => x.Names) 
      .GroupBy(x => x, (y, z) => new { Name = y, Count = z.Count() }); 

// and to test... 
foreach (var item in query) 
{ 
    Console.WriteLine("{0} - {1}", item.Name, item.Count); 
}