■ HashSet 클래스 : 객체 컬렉션 특정 속성 값의 집합 구하기

----------------------------------------------------------------------------------------------------

Program.cs

 

 

using System;

using System.Collections.Generic;

using System.Collections.ObjectModel;

using System.Linq;

 

namespace TestProject

{

    /// <summary>

    /// 프로그램

    /// </summary>

    public class Program

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method

        ////////////////////////////////////////////////////////////////////////////////////////// Static

        //////////////////////////////////////////////////////////////////////////////// Private

 

        #region 프로그램 시작하기 - Main()

 

        /// <summary>

        /// 프로그램 시작하기

        /// </summary>

        private static void Main()

        {

            ObservableCollection<Employee> collection = Employee.GetCollection();

 

            var result = collection.DistinctBy(p => p.Sex).OrderBy(p => p.Sex);

 

            foreach(var item in result)

            {

                Employee employee = item as Employee;

 

                Console.WriteLine(employee.Sex);

            }

        }

 

        #endregion

    }

}

 

 

Employee.cs

 

 

using System.Collections.ObjectModel;

 

namespace TestProject

{

    /// <summary>

    /// 직원

    /// </summary>

    public class Employee

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// Property

        ////////////////////////////////////////////////////////////////////////////////////////// Public

 

        #region ID - ID

 

        /// <summary>

        /// ID

        /// </summary>

        public string ID { get; set; }

 

        #endregion

 

        #region 성명 - Name

 

        /// <summary>

        /// 성명

        /// </summary>

        public string Name { get; set; }

 

        #endregion

 

        #region 성별 - Sex

 

        /// <summary>

        /// 성별

        /// </summary>

        public string Sex { get; set; }

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method

        ////////////////////////////////////////////////////////////////////////////////////////// Static

        //////////////////////////////////////////////////////////////////////////////// Public

 

        #region 컬렉션 구하기 - GetCollection()

 

        /// <summary>

        /// 컬렉션 구하기

        /// </summary>

        /// <returns>컬렉션</returns>

        public static ObservableCollection<Employee> GetCollection()

        {

            ObservableCollection<Employee> collection = new ObservableCollection<Employee>();

 

            for(int i = 0; i < 100000; i++)

            {

                collection.Add

                (

                    new Employee()

                    {

                        ID   = i.ToString(),

                        Name = "직원" + i.ToString(),

                        Sex  = (i % 3 == 1 ? "남" : "여")

                    }

                );

            }

 

            return collection;

        }

 

        #endregion

    }

}

 

 

EnumerableExtension.cs

 

 

using System;

using System.Collections.Generic;

 

namespace TestProject

{

    /// <summary>

    /// 열거 가능 확장

    /// </summary>

    public static class EnumerableExtension

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method

        ////////////////////////////////////////////////////////////////////////////////////////// Static

        //////////////////////////////////////////////////////////////////////////////// Public

 

        #region 중복 값을 제거한 리스트 구하기 - DistinctBy<TSource, TKey>(sourceEnumerable, keySelector)

 

        /// <summary>

        /// 중복 값을 제거한 리스트 구하기

        /// </summary>

        /// <typeparam name="TSource">소스 타입</typeparam>

        /// <typeparam name="TKey">키 타입</typeparam>

        /// <param name="sourceEnumerable">소스 열거 가능</param>

        /// <param name="keySelector">키 셀렉터</param>

        /// <returns>중복 값을 제거한 리스트</returns>

        public static IEnumerable<TSource> DistinctBy<TSource, TKey>(this IEnumerable<TSource> sourceEnumerable,

            Func<TSource, TKey> keySelector)

        {

            HashSet<TKey> hashSet = new HashSet<TKey>();

 

            foreach(TSource sourceItem in sourceEnumerable)

            {

                if(hashSet.Add(keySelector(sourceItem)))

                {

                    yield return sourceItem;

                }

            }

        }

 

        #endregion

    }

}

 

----------------------------------------------------------------------------------------------------

Posted by 사용자 icodebroker
TAG

댓글을 달아 주세요