C #의 동적 배열


112

C #에서 동적 배열을 만드는 방법이 있습니까?


1
여전히 오래된 진흙 속에 갇혀 있다면 List <> 대신 []를 사용하면 Array.Resize ()를 사용할 수 있습니다. 여기에 좋은 예가 있습니다. dotnetperls.com/array-resize
지안

dotnetperls.com/array-resize 링크가 작동하지 않습니다. (참고)
Su Llewellyn

답변:


150

Generic Lists를 살펴보십시오 .


13
질문 (짧고 설명 적 임에도 불구하고)은 일반 목록에 대한 질문이 아닙니다. 질문은 dynamic[] msdn.microsoft.com/en-GB/library/dd264736.aspx (동적 형식 배열) 또는 ExpandoObject msdn.microsoft.com/에 대한 질문 일 수 있습니다. EN-US / 라이브러리 / ... I 수 -1하지 이러한 언급에 대한 답
누가 복음 T 오브라이언을

6
@ LukeTO'Brien, dynamics는 C # 4.0에서 도입되었으며,이 질문이 처음 제기 된 지 1 년 만에 출시되었습니다. 영업 이익은 아마 같은 크기 조절이 데이터 구조에 대해 질문했다 en.wikipedia.org/wiki/Dynamic_array
브라이언 머렐

6
기사 링크로만 구성된 답변은 도움이되지 않습니다. 링크가 활성 상태로 유지된다는 보장은 없습니다.
JamEngulfer

@JamEngulfer 그건 사실이 아닙니다. 그의 링크 텍스트가 "this"가 링크 된 "Look at this"였다면 동의합니다. 링크를 제거하고 남은 것을 살펴보면 "일반 목록 살펴보기"에 대한 OP의 답변은 향후 독자가 인터넷 검색을 할 수 있도록 많은 정보를 제공합니다 ....
Lynn Crumbling

88

코드 샘플로 Chris와 Migol의 답변을 확장합니다.

어레이 사용

Student[] array = new Student[2];
array[0] = new Student("bob");
array[1] = new Student("joe");

일반 목록 사용. 내부적으로 List <T> 클래스는 스토리지에 배열을 사용하지만 효율적으로 성장할 수있는 방식으로 사용합니다.

List<Student> list = new List<Student>();
list.Add(new Student("bob"));
list.Add(new Student("joe"));
Student joe = list[1];

2
우리 둘 다 ArrayList
Migol

21
이 답변은 @Migol보다 낫습니다. 왜냐하면 이것은 단순히 키워드로 언급하는 대신 List <>를 실제로 사용하는 방법을 보여주기 때문입니다. "반 나쁜"-> "반 좋은"-> 좋은
fhugas

56

때때로 일반 배열이 더 편리하기 때문에 일반 목록보다 선호됩니다 (예를 들어 값 비싼 계산-숫자 대수 응용 프로그램 또는 R 또는 Matlab과 같은 통계 소프트웨어와 데이터 교환을위한 더 나은 성능).

이 경우 목록을 동적으로 시작한 후 ToArray () 메서드를 사용할 수 있습니다.

List<string> list = new List<string>();
list.Add("one");
list.Add("two");
list.Add("three");

string[] array = list.ToArray();

물론 이것은 배열의 크기를 알 수 없거나 사전에 고정 된 경우에만 의미가 있습니다. 프로그램의 어느 지점에서 배열의 크기를 이미 알고 있다면 고정 길이 배열로 시작하는 것이 좋습니다. (예를 들어 ResultSet에서 데이터를 검색하는 경우 크기를 계산하고 해당 크기의 배열을 동적으로 시작할 수 있습니다.)


1
인덱서를 사용하는 한 가치가 없습니다.
aaimnr 2011

2
Arary는 더 편리하지 않으며 (List <T> 인터페이스의 하위 집합을 제공함) List <T>가 아래에 일반 배열을 사용하기 때문에 거의 동일한 성능을 제공합니다. 6000000 요소에 대한 반복 : 목록 / 대상 : 1971ms 배열 / 대상 : 1864ms (벤치 마크 from stackoverflow.com/questions/454916/… )
aaimnr 2011

9
이 경우 인터페이스에 배열을 전달하기 위해 다음이 있어야합니다 배열합니다. 목록을 작성하고 전달하기 직전에 배열로 만드는 것이 훨씬 쉽습니다. 나는이 답변이 질문을 다루기 때문에 다른 답변보다 더 좋아합니다!
Michael Stimson 2014 년

36

List<T>강력한 형식의 ArrayList경우 또는 .NET 1.1이 있거나 변수를 캐스팅하는 것을 좋아하는 경우.


2

동적 배열 예 :

Console.WriteLine("Define Array Size? ");
int number = Convert.ToInt32(Console.ReadLine());

Console.WriteLine("Enter numbers:\n");
int[] arr = new int[number];

for (int i = 0; i < number; i++)
{
    arr[i] = Convert.ToInt32(Console.ReadLine());
}
for (int i = 0; i < arr.Length; i++ )
{
    Console.WriteLine("Array Index: "+i + " AND Array Item: " + arr[i].ToString());
}
Console.ReadKey();

2

동적 개체로이 작업을 수행 할 수 있습니다.

var dynamicKeyValueArray = new[] { new {Key = "K1", Value = 10}, new {Key = "K2", Value = 5} };

foreach(var keyvalue in dynamicKeyValueArray)
{
    Console.Log(keyvalue.Key);
    Console.Log(keyvalue.Value);
}

1

실제로 배열을 구현 하는 배열 목록 을 사용하십시오 . 처음에는 크기 4의 배열을 사용하고 가득 차면 두 배 크기의 새 배열이 생성되고 첫 번째 배열의 데이터가 두 번째 배열에 복사되고 이제 새 항목이 새 배열에 삽입됩니다. 또한 두 번째 배열의 이름은 first라는 별칭을 생성하여 이전과 동일한 이름으로 액세스 할 수 있고 첫 번째 배열이 삭제됩니다.


1

컬렉션 클래스의 arraylist 객체를 사용할 수 있습니다.

using system.collections;
   static void main()
        {
        Arrylist arr=new Arrylist();
         }

사용할 수있는 요소를 추가하려는 경우

arr.add();

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.