[C#] C # 배열에 값 추가

아마도 이것은 매우 간단한 것입니다-C #으로 시작하고 배열에 값을 추가해야합니다.

int[] terms;

for(int runs = 0; runs < 400; runs++)
{
    terms[] = runs;
}

PHP를 사용한 사람들을 위해 C #에서 수행하려는 작업은 다음과 같습니다.

$arr = array();
for ($i = 0; $i < 10; $i++) {
    $arr[] = $i;
}



답변

당신은 이런 식으로 할 수 있습니다-

int[] terms = new int[400];
for (int runs = 0; runs < 400; runs++)
{
    terms[runs] = value;
}

또는 목록을 사용할 수 있습니다. 목록의 장점은 목록을 인스턴스화 할 때 배열 크기를 알 필요가 없습니다.

List<int> termsList = new List<int>();
for (int runs = 0; runs < 400; runs++)
{
    termsList.Add(value);
}

// You can convert it back to an array if you would like to
int[] terms = termsList.ToArray();

편집 : a) List <T>의 for 루프가 List <T>의 foreach 루프 보다 2 배 이상 저렴합니다 . b) 배열의 루핑이 List <T>의 루프보다 약 2 배 저렴합니다 .c) 루핑 for를 사용 하는 배열 은 foreach (대부분의 사람들)를 사용하는 List <T>에서 반복하는 것보다 5 배 저렴 합니다.


답변

C # 3으로 작성하는 경우 하나의 라이너로 수행 할 수 있습니다.

int[] terms = Enumerable.Range(0, 400).ToArray();

이 코드 스 니펫은 파일 맨 위에 System.Linq에 대한 지시문이 있다고 가정합니다.

다른 한편으로, PHP의 경우와 같이 동적으로 크기를 조정할 수있는 것을 찾고 있다면 (실제로는 그것을 배우지 못했습니다), int [] 대신 List를 사용하고 싶을 수도 있습니다 . 여기에 무슨 코드는 같을 것이다 :

List<int> terms = Enumerable.Range(0, 400).ToList();

그러나 terms [400]을 값으로 설정하여 401 번째 요소를 간단히 추가 할 수는 없습니다. 대신 다음과 같이 Add ()를 호출해야합니다.

terms.Add(1337);


답변

Linq 의 방법을 사용하면 Concat 은 이것을 간단하게 만듭니다.

int[] array = new int[] { 3, 4 };

array = array.Concat(new int[] { 2 }).ToArray();

결과 3,4,2


답변

배열을 사용하여 수행하는 방법에 대한 답변이 여기에 제공됩니다.

그러나 C #에는 System.Collections라는 매우 편리한 기능이 있습니다. 🙂

컬렉션은 배열을 사용하는 대신 사용할 수있는 훌륭한 대안이지만, 대부분은 배열을 내부적으로 사용합니다.

예를 들어, C #에는 PHP 배열과 매우 유사한 기능을하는 List라는 컬렉션이 있습니다.

using System.Collections.Generic;

// Create a List, and it can only contain integers.
List<int> list = new List<int>();

for (int i = 0; i < 400; i++)
{
   list.Add(i);
}


답변

다른 사람들이 설명했듯이 List를 중개자로 사용하는 것이 가장 쉬운 방법이지만 입력 내용이 배열이고 데이터를 List에 보관하고 싶지 않기 때문에 성능이 걱정 될 수 있습니다.

가장 효율적인 방법은 새 배열을 할당 한 다음 Array.Copy 또는 Array.CopyTo를 사용하는 것입니다. 목록 끝에 항목을 추가하려는 경우 어렵지 않습니다.

public static T[] Add<T>(this T[] target, T item)
{
    if (target == null)
    {
        //TODO: Return null or throw ArgumentNullException;
    }
    T[] result = new T[target.Length + 1];
    target.CopyTo(result, 0);
    result[target.Length] = item;
    return result;
}

원하는 경우 대상 색인을 입력으로 사용하는 삽입 확장 메소드의 코드를 게시 할 수도 있습니다. 좀 더 복잡하고 정적 메서드 Array.Copy 1-2 번을 사용합니다.


답변

Thracx의 답변을 바탕으로 (응답 할 충분한 포인트가 없습니다) :

public static T[] Add<T>(this T[] target, params T[] items)
    {
        // Validate the parameters
        if (target == null) {
            target = new T[] { };
        }
        if (items== null) {
            items = new T[] { };
        }

        // Join the arrays
        T[] result = new T[target.Length + items.Length];
        target.CopyTo(result, 0);
        items.CopyTo(result, target.Length);
        return result;
    }

이를 통해 하나 이상의 항목을 배열에 추가하거나 배열을 매개 변수로 전달하여 두 배열을 결합 할 수 있습니다.


답변

먼저 배열을 할당해야합니다.

int [] terms = new int[400]; // allocate an array of 400 ints
for(int runs = 0; runs < terms.Length; runs++) // Use Length property rather than the 400 magic number again
{
    terms[runs] = value;
}