2010-12-02 8 views
7

나는 C# 초보자 질문이 있습니다. 이 두 가지 중에서도 훌륭한 연습은 무엇이라고 생각합니까? ... 배열보다 목록이 더 빠르거나 빠릅니까?목록 배열 사용 - 모범 사례

 //Method 1 
     int[] i_array = { 2, 0, 110, 53455, 2223 }; 

     if (someBolean) 
     { 
      Array.Resize(ref i_array, i_array.Length + 1); 
      i_array[i_array.Length - 1] = someIntValue; 
     } 

     //Method 2 
     var i_list = new List<int>(); 
     i_list.AddRange(new int[] { 2, 0, 110, 53455, 2223 }); 

     if (someBolean) 
      i_list.Add(someIntValue); 
+1

배열의 크기를 일정하게 변경하면 방법 2의 목록을 사용할 수도 있습니다. –

+0

어렵다는 것을 알고 있지만 학습 곡선의이 단계는 성능이 문제가 될 때까지 성능에 대해 걱정하지 마십시오 *. http://stackoverflow.com/questions/211414/is-premature-optimization-really-the-root-of-all-evil –

답변

5

나중에 가변 크기 모음에 대한 최상의 방법으로 간주됩니다.

사용중인 컬렉션 유형에 따라 Framework 클래스는 첫 번째 예제에서 수행중인 것과 비슷한 내부적으로 수행합니다 (단 하나의 요소로 크기를 조정하는 대신 크기가 커지므로 요소를 계속 추가 할 수있는 여분의 버퍼 공간이 있음).

일반적으로 휠을 다시 발명하고 싶지는 않습니다. 프레임 워크는 다양한 크기의 컬렉션 클래스 톤을 제공합니다. 자신의 글을 쓰는 대신에 사용하십시오.

+0

감사합니다. 나는 그것이 더 큰 크기로 증가 할 것이라고 생각했다. 나는 목록을 사용할 것이다. – GuruMeditation

3

목록은 내부적으로 배열을 사용하므로이 둘의 성능이 동일 할 것으로 기대합니다.

원시 배열보다 목록을 프로그래밍 할 때 오류를 만드는 것이 훨씬 어렵 기 때문에 대부분 목록을 선호합니다.

11

성장하거나 줄어들 수있는 컬렉션이 필요할 때 목록을 사용하십시오.

길이를 알고 변경하지 않으려는 경우 배열을 사용하십시오.


당신은 목록을 초기화 할 collection initializers을 사용할 수 있습니다, 그래서 당신은 배열을 초기화 유사한 구문을 얻을 : 당신이 모두 유사한 작업을 수행 할 수 있도록

var list = new List<int> { 2, 0, 110, 53455, 2223 }; 

if (someBoolean) 
{ 
    list.Add(someIntValue); 
} 
+0

감사합니다. 그렇게 초기화 할 수 있는지 몰랐습니다. – GuruMeditation

0

모두, IEnumerables로 바람. 리스트의 이점은 다양한 크기의 콜렉션 인 Justin Niessner가 말한 것입니다. 또한 배열의 크기를 조정하면 프레임 워크에서 메모리를 다시 할당해야하며 List는 링크 된 목록으로 동작하며 컬렉션에서 요소를 추가하거나 제거하기 만하면됩니다.