C # 배열에 값 추가


511

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

int[] terms;

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

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

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

10
'terms [] = value;'해서는 안됩니다 'terms [] = runs;'입니까?
tymtam

C #에서는 한 번 생성 된 배열 크기를 변경할 수 없습니다. 배열과 같은 것을 원하지만 요소를 추가 / 제거 할 수 있으려면 List <int> ()를 사용하십시오.
Kamran Bigdely

답변:


822

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

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 배 저렴 합니다.


1
이 시나리오에서 목록을 사용하면 어떤 이점이 있습니까?
필 힐리

9
@PhillHealey 배열을 만들기 전에 배열의 크기를 "알지"않아도됩니다. 보시다시피,이 예에서 OP는 "new int [400]"에 값을 입력해야하지만 목록을 사용하면 그렇게 할 필요가 없습니다.
Hejner

3
값이 어디에도 정의되어 있지 않기 때문에 첫 번째 코드 비트는 아무것도 아닙니다. -_-
EasyBB

1
ARRAY에 크기가 필요한 이유는 무엇입니까 ??? 그냥 new int[]{}!!!!!
T.Todua

6
@ T.Todua 제안하는 것처럼 빈 배열을 만든 다음 존재하지 않는 인덱스에 액세스하여 값을 설정하려고 OutOfRangeException하면 코드를 실행하자마자 얻을 수 있습니다. 배열은 사용하려는 크기로 초기화해야하며, 처음에 모든 공간을 예약하고, 마녀는 매우 빠르지 만 크기를 조정할 수는 없습니다.
KinSlayerUY

85

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);

65

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

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

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

결과 3,4,2


12
이 방법을 사용하면 배열에 400 개의 항목을 추가하여 공간이 하나 더있는 배열의 사본을 만들고 모든 요소를 ​​새 배열로 400 백 번 이동합니다. 따라서 성능을 현명하게 권장하지 않습니다.
KinSlayerUY

39

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

그러나 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);
}

리스트 요소를 검색하기 위해 : int a = list [i];
Behzad

10

다른 사람들이 설명했듯이 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 번을 사용합니다.


2
목록을 작성하고 채우고 마지막에이 사본을 어레이에 복사하는 것이 성능면에서 훨씬 나을 것입니다. 따라서 400 배 이상 배열을 작성 및 복사하지 않습니다.
KinSlayerUY

10

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;
    }

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


8

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

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;
}

5
int ArraySize = 400;

int[] terms = new int[ArraySize];


for(int runs = 0; runs < ArraySize; runs++)
{

    terms[runs] = runs;

}

그것이 내가 코딩 한 방법입니다.


3

C # 배열은 고정 길이이며 항상 색인화됩니다. Motti의 솔루션으로 이동 :

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

이 배열은 밀도가 높은 배열이며 드롭 할 수있는 400 바이트의 연속 블록입니다. 동적 크기의 배열을 원하면 List <int>를 사용하십시오.

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

int []와 List <int>는 연관 배열이 아니며 C #의 Dictionary <>입니다. 배열과 목록 모두 밀도가 높습니다.


2
int[] terms = new int[10]; //create 10 empty index in array terms

//fill value = 400 for every index (run) in the array
//terms.Length is the total length of the array, it is equal to 10 in this case 
for (int run = 0; run < terms.Length; run++) 
{
    terms[run] = 400;
}

//print value from each of the index
for (int run = 0; run < terms.Length; run++)
{
    Console.WriteLine("Value in index {0}:\t{1}",run, terms[run]);
}

Console.ReadLine();

/*산출:

인덱스 0의
값 : 400 인덱스 1의
값 : 400 인덱스 2의
값 : 400 인덱스 3의
값 : 400 인덱스 4의
값 : 400 인덱스 5의
값 : 400 인덱스 6의
값 : 400 인덱스 7의
값 7 : 400 값 인덱스 8 : 400
인덱스 9 :의 값 400
* /


이 솔루션을 설명해 주시겠습니까?
Deep Frozen

룬, 방금 소스 코드에 주석을 포함 시켰습니다.> 질문에 대답 할 수 있기를 바랍니다.
jhyap

2

배열에 요소를 쉽게 추가 할 수는 없습니다. 당신은 주어진 위치에있는 요소를 설정할 수 있습니다 fallen888 설명하지만, 내가 사용하는 것이 좋습니다 List<int>또는를 Collection<int>대신 사용 ToArray()당신이 배열로 변환해야하는 경우.


2

실제로 배열이 필요한 경우 다음이 가장 간단합니다.

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);
}

int [] terms = list.ToArray();

2

다른 변형을 위해 이것을 추가 할 것입니다. 이 유형의 기능적 코딩 라인을 더 선호합니다.

Enumerable.Range(0, 400).Select(x => x).ToArray();

1

배열의 크기를 모르거나 추가하려는 기존 배열이 이미있는 경우 두 가지 방법으로이 문제를 해결할 수 있습니다. 첫 번째는 generic을 사용합니다 List<T>. 이렇게하려면 배열을 a로 변환 var termsList = terms.ToList();하고 Add 메서드를 사용합니다. 그런 다음 var terms = termsList.ToArray();메소드를 사용하여 배열로 다시 변환하십시오.

var terms = default(int[]);
var termsList = terms == null ? new List<int>() : terms.ToList();

for(var i = 0; i < 400; i++)
    termsList.Add(i);

terms = termsList.ToArray();

두 번째 방법은 현재 배열의 크기를 조정하는 것입니다.

var terms = default(int[]);

for(var i = 0; i < 400; i++)
{
    if(terms == null)
        terms = new int[1];
    else    
        Array.Resize<int>(ref terms, terms.Length + 1);

    terms[terms.Length - 1] = i;
}

.NET 3.5를 사용하는 경우 Array.Add(...);

두 가지 모두 동적으로 수행 할 수 있습니다. 많은 항목을 추가하려면을 사용하십시오 List<T>. 두 항목에 불과하면 배열 크기를 조정하는 성능이 향상됩니다. 이는 List<T>객체 를 만드는 데 많은 타격을주기 때문 입니다.

진드기의 시간 :

3 개 항목

배열 크기 조정 시간 : 6

목록 추가 시간 : 16

400 개 항목

배열 크기 조정 시간 : 305

목록 추가 시간 : 20


1

다른 접근법 :

int runs = 0; 
bool batting = true; 
string scorecard;

while (batting = runs < 400)
    scorecard += "!" + runs++;

return scorecard.Split("!");

3
약간 소설이지만, 이것은 많은 문자열 연결을 수행 한 다음 큰 열거 연산을 수행합니다! 가장 성능이 뛰어나거나 이해하기 쉽고 읽기 쉬운 방법은 아닙니다.
BradleyDotNET

@Ali Humayun 실제로 =비교 연산자 대신 할당 연산자를 사용하려고 했습니까? 진압 변수를 생략 runs < 400하고 루프를 제어하는 ​​데 사용할 수 있습니다 .
Steve

그냥 두 번 입력 프로그래밍 연습
알리 Humayun

1

한 가지 방법은 LINQ를 통해 배열을 채우는 것입니다.

하나의 요소로 배열을 채우려면 간단히 쓸 수 있습니다.

string[] arrayToBeFilled;
arrayToBeFilled= arrayToBeFilled.Append("str").ToArray();

또한 여러 요소로 배열을 채우려면 루프에서 이전 코드를 사용할 수 있습니다

//the array you want to fill values in
string[] arrayToBeFilled;
//list of values that you want to fill inside an array
List<string> listToFill = new List<string> { "a1", "a2", "a3" };
//looping through list to start filling the array

foreach (string str in listToFill){
// here are the LINQ extensions
arrayToBeFilled= arrayToBeFilled.Append(str).ToArray();
}

0
int[] terms = new int[400];

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

0
         static void Main(string[] args)
        {
            int[] arrayname = new int[5];/*arrayname is an array of 5 integer [5] mean in array [0],[1],[2],[3],[4],[5] because array starts with zero*/
            int i, j;


          /*initialize elements of array arrayname*/
            for (i = 0; i < 5; i++)
            {
                arrayname[i] = i + 100;
            }

             /*output each array element value*/
            for (j = 0; j < 5; j++)
            {
                Console.WriteLine("Element and output value [{0}]={1}",j,arrayname[j]);
            }
            Console.ReadKey();/*Obtains the next character or function key pressed by the user.
                                The pressed key is displayed in the console window.*/
        }

0
            /*arrayname is an array of 5 integer*/
            int[] arrayname = new int[5];
            int i, j;
            /*initialize elements of array arrayname*/
            for (i = 0; i < 5; i++)
            {
                arrayname[i] = i + 100;
            }

0

ToArray () 메서드를 사용하지 않고 C #을 사용하여 목록 값을 문자열 배열에 추가하려면

        List<string> list = new List<string>();
        list.Add("one");
        list.Add("two");
        list.Add("three");
        list.Add("four");
        list.Add("five");
        string[] values = new string[list.Count];//assigning the count for array
        for(int i=0;i<list.Count;i++)
        {
            values[i] = list[i].ToString();
        }

값 배열의 출력에는 다음이 포함됩니다.

하나

다섯

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