C#

LINQ ToLookup 사용법

지오준 2021. 7. 30.
반응형

ToLookup는 컬렉션(List, Array, Dictionay)의 요소중에서 특정 데이터의 키값을 가지고 데이터를 가져올때 사용됩니다.

샘플코드에서는 학생의 점수를 클래스의 키값으로 각 클래스에 속한 학생의 점수를 가져올 수 있습니다.

private class TestResult
{
	/// <summary>
	/// 소속 클래스
	/// </summary>
	public string Class { get; set; }

	/// <summary>
	/// 성명
	/// </summary>
	public string Name { get; set; }

	/// <summary>
	/// 점수
	/// </summary>
	public int Score { get; set; }

	/// <summary>
	/// 출력문자열
	/// </summary>
	/// <returns></returns>
	public override string ToString()
	{
		return string.Format("Class:{0}, Name:{1}, Score:{2}", Class, Name, Score);
	}
}

static void Main(string[] args)
{
	// 테스트결과 데이터 생성
	TestResult[] testResults = new TestResult[]
	{
		new TestResult() { Class = "A", Name = "KIM", Score = 100 },
		new TestResult() { Class = "A", Name = "LEE", Score = 90 },
		new TestResult() { Class = "B", Name = "SHIN", Score = 80 },
		new TestResult() { Class = "C", Name = "JEON", Score = 70 },
		new TestResult() { Class = "D", Name = "HONG", Score = 60 },
		new TestResult() { Class = "D", Name = "YUN", Score = 50 }
	};

	// 테스크결과 Array부터 Class별 데이터를 추출
	ILookup<string, TestResult> results = testResults.ToLookup(param => param.Class);

	// 테스트결과 Array값을 전부출력
	System.Console.WriteLine(" Persons\n{0}", testResults.Value());

	//class별로 그룹지어 결과를 표시
	foreach (var item in results)
	{
		System.Console.WriteLine(" Class:{0}", item.Key);
		foreach (var person in item)
		{
			System.Console.WriteLine("\t{0}", person);
		}
	}

	// 입력대기
	System.Console.ReadKey();
}

/// <summary>
/// 텍스트 값 공통처리
/// </summary>
public static string Value(this IEnumerable values)
{
	string value = string.Empty;
	foreach (var item in values)
	{
		value += string.Format(" [{0}], ", item) + System.Environment.NewLine;
	}
	return value.Remove(value.LastIndexOf(','), 1);
}

결과값

LinqSample15.zip
0.18MB

반응형

'C#' 카테고리의 다른 글

LINQ Repeat 사용법  (0) 2021.08.13
LINQ Range 사용법  (0) 2021.08.09
LINQ Intersect 사용법  (0) 2021.07.28
LINQ Except 사용법  (0) 2021.07.27
LINQ BinarySearch 사용법  (0) 2021.07.26

댓글