본문 바로가기
개발 이야기/C# 이야기

C# List<> Find검색

by 런던살자 2020. 11. 24.

안녕하세요 마블랑입니다.

 

C# 닷넷 프레임워크에서 다른 프로그래밍 언어의 기능에는 없는 유용한 기능중에 하나가 List<>라고 생각합니다.

 

특히 구조체 단위의 데이터 리스트를 사용할때 굉장히 좋습니다.

 

아마도 다른 프로그래밍 언어에서는 배열을 사용해야 할텐데요.

 

그러면 배열의 위치인 인덱스나 메모리등을 잘 관리해야할것입니다.

 

List<> 는 요소를 잘 추가해주기만 하면 데이터 삭제나 데이터 변경이 아주 용이 합니다. 

 

게다가 배열로도 변환할 수도 있어 닷넷으로 프로그래밍 할때는 배열보다는 List<>를 먼저 사용하곤 합니다.

 

 

이번 포스팅은 이 List 클래스에 이미 데이터가 들어가 있는 상태에서 어떻게 데이터를 찾을 수 있는지 알아보겠습니다.

 

배열같은 경우나 List 클래스의 기능을 이용하지 않는다면 아래처럼 반복문을 돌려가면 데이터를 일일이 찾아야할텐데요

List<Temp_struct> TempList = new List<Temp_struct>();

//테스트 데이터 추가
for (int i = 0; i < 10; i++)
{
  Temp_struct record = new Temp_struct();

  record.TempString = "abcdef"+i
  record.number = i;

  TempList.Add(record);
}


//검색 
for(int i =0 ; i <TempList.Count();i++){
	if(TempList[i].TempString =="abcdef1"){
    	//데이터 검색
    }
}

 

위와 같은 방법도 있지만 List<> 클래스에서 제공해주는 함수를 이용하면 코드의 양을 더 줄일수 있습니다.

 

// 데이터를 포함한 구조체를 검색할때

Temp_struct result = TempList.Find(x => x.TempString == "abcdef1");
//성공시 해당 검색 결과를 가진 구조체 반환
//실패시 구조체 초기값 반환


//데이터를 포함한 구조체의 List 내의 인덱스를 구할때

int nIndex = TempList.FindIndex(x => x.TempString == "abcdef1");
//성공시 해당 구조체의 인덱스 반환 ( 0 ~ )
//실패시 -1 반환

 

구조체를 통째로 반환하는 방법과 인덱스만 찾는 방법 두가지가 있습니다.

 

구조체를 통째로 반환할때는 Find 함수, 인덱스만 찾을때는 FindIndex가 있는데요 

 

순차적으로 검색했을때 가장 먼저 찾은 구조체를 반환하니 모든 데이터를 검색하서 반환받으려면 List<> 클래스의 다른 FInd 함수를 사용해야할듯 합니다.

 

 

이상 마블랑이었습니다. 

 

읽어주어서 고맙습니다.

댓글