본문 바로가기

공부생각/C/C++/C#

[C#] List로 다수의 Struct들 관리하기 + Class와의 차이



흠...

일단 동적할당에 관련되어서 많은 것들이 많다.
아무래도 배열을 그대로 사용 하는 것은 갯수의 제한이 있고, 시스템이나 상황에 따라 유동적이지 못하거나, 메모리를 많이 잡아먹는 경우가 발생한다.

한마디로
유동성과 적응력을 높이면 메모리 낭비가 심하고,
낭비를 줄이려고 하다가는 배열의 갯수가 모잘라 예외가 발생할 수도 있다.

여기서 뭐 예외가 발생하면 뒷처리를 할 수도 있겠지만,

그것보다 우리에게 주어진 자료구조 List를 사용해서 컨트롤 해 보자.


일단 Class 와 struct를 사용하는데 있어서 차이점에 관심있으면 알아서 펼쳐서 보도록


자, 그럼 여기서는 list를 이용해서 struct를 관리해보자.

참 골치아픈것이 struct 를 list화 시켜버리면 struct의 각각의 값에 직접적인 접근이 불가능하다.

struct book{
     public string id;
}




라고 했을때 (생성자 생략)

book temp = new book();
List<book> list = new List<book>();
list.Add(temp);
list[0].id = "이판사판";




이렇게 하려하면 오류가 뜬다.


오류 2 
변수가 아니므로 'System.Collections.Generic.List<book1>.this[int]'의 반환 값을 수정할 수 없습니다. C:\Documents and Settings\Soon-chan\My Documents\Visual Studio 2008\Projects\practice\practice\Program.cs 53 13 practice



값을 직접적으로 접근해서 고칠 수가 없다는 것이다.
따로 변수로 지정해 둔게 아니고, 그냥 list가 struct형식으로 정보를 다발로 가지고 있을뿐 정확한 인덱스를 가지지는 않는것 같다. (이부분 명확하지 않음)

그럼 이런 편법을 사용해 주도록 하자.


void changeName(List<book1> inList, int index, string value)
        {
book1 temp = inList[index];       // 1
            temp.name = value;                  // 2
            inList[index] = temp;                // 3
        }


마치 스와핑(임시 변수를 이용한 자리바꾸기)의 모습과 비슷하다.

1. 임시 해당struct를 만들어서 list에서 통채로 빼오고 난 뒤에,
2. 임시로 해당 struct에다가 바꾸고 싶은 값을 바꿔준다음에
3. 다시 리스트에 원하는 자리에다가 임시 해당struct 를 넣어주면된다.


이렇게 하면 조금 과정이 길어진다는 단점이 있으나,
정확하게 struct변수를 list로 조절 할 수 있다.



끄읕 비얌비얌


'공부생각 > C/C++/C#' 카테고리의 다른 글

[C++] 리스트 관리  (0) 2010.11.09
C++ 어레이 사용시 주의해야할점  (0) 2010.01.19
[C언어] 배열을 동적할당하기  (4) 2009.11.17
[C] 변수타입와 비트수  (0) 2009.07.28
[C#] Text box 에서 줄 띄워쓰는 법  (0) 2009.06.15