2013-04-07 9 views
-2

사용자 입력을 통해 배열에 요소를 추가하고 싶습니다. 이것은 목록을 사용하여 매우 쉽게 할 수 있지만 배열을 사용해야한다는 것을 알고 있습니다.C# 사용자 입력을 통해 배열에 값 추가

코드의 문제는 선언 할 때 array.lenght 항상 배열 너무 크기를 설정할 수 야해 1. 내가 배열이 요소의 총량과 동일한 크기를 갖고 싶어 할 것입니다 배열

배열에 요소를 추가하면 이전 값 + 추가 된 값을 복사하고 새 배열을 만들 것이라고 생각했습니다.

는 답변

public static void Add(int x){ 

    if (Item == null) // First time need to initialize your variable 
    { 
     Item = new int[1]; 
    } 
    else 
    { 
     Array.Resize<int>(ref Item, Item.Length + 1); 
    } 
    Item[Item.Length-1] = x; //fixed Item.Length -> Item.Length-1 
} 
+0

나는 당신의 질문을 이해하지 못합니다. 정확히 무엇을하고 싶습니까? – I4V

+0

@ I4V 사용자 입력을 통해 배열에 요소를 추가하고 싶습니다. 하지만 배열에 포함 된 요소의 총 크기와 항상 같은 크기를 유지하기를 원합니다. – Ben

+1

@ 벤 당신은 considently 더 큰 하나의 크기의 배열을 만들고 마지막에 추가 할 것입니다. 당신이 지금하고있는 방식은 당신이 전화 할 때마다 당신이 당신의 아이템으로 사이즈 하나의 새로운 배열을 만드는 것을 추가하는 것입니다. 기본적으로 전체 배열을 덮어 쓰고 있습니다.크기의 정확한 크기를 유지하고 싶습니다. 이것이 필수적인 것이라면 매우 비효율적 일 것입니다. 당신은 그것을 미리 정해진 크기로 만들 수 있습니까? 50, 50에 도달하면 또 다른 50을 크기에 추가합니까? – pinkfloydx33

답변

0

나는 VS에서 테스트하지 않았다. 여기에 가서 :

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static int[] Item; //Fixed int Item[] to int[] Item 
     static void Main(string[] args) 
     { 
      Add(3); 
      Add(4); 
      Add(6); 
     } 


    public static void Add(int x){ 

     if (Item == null) // First time need to initialize your variable 
     { 
      Item = new int[1]; 
     } 
     else 
     { 
      Array.Resize<int>(ref Item, Item.Length + 1); 
     } 
     Item[Item.Length-1] = x; //fixed Item.Length -> Item.Length-1 
    } 

    } 
} 

이렇게하면 매번 배열의 크기를 조정 한 다음 마지막 항목을 추가하려는 항목으로 설정해야합니다. 이것은 매우 비효율적입니다.

+0

감사합니다. – Ben

+0

@ pinkfloyddx33 이것은 배열의 크기 만 조절하지만 실제로 값을 추가하지는 않습니까? – Ben

+0

배열의 크기를 조정 한 다음 배열의 마지막 항목을 새 값으로 설정합니다. – pinkfloydx33

1

사용 List<int> 대신 당신을 위해 동적으로 크기를합니다 명시 적 배열로 업데이트하고, 마지막에 요소를 추가하려면 추가() 메서드를 사용합니다.

+0

'목록을 사용하여 매우 쉽게 할 수 있지만, 배열을 사용해야합니다. '라는 메시지가 표시됩니다. – I4V

+0

감사하지만 배열을 사용해야합니다. – Ben

0

목록은 요소를 추가함에 따라 커집니다. 배열의 크기는 일정합니다. 배열을 사용해야하는 경우 가장 쉬운 방법은 입력 된 요소를 저장할 수있는 크기의 배열을 만드는 것입니다.

private int[] _items = new int[100]; 
private int _count; 

public void Add(int x) 
{ 
    _items[_count++] = x; 
} 

당신은 이미 (내가 여기 분야 _count을 사용) 삽입 된 요소의 수를 추적 할 필요가; 예를 들어


, 당신은 다음과 같이 모든 항목을 열거 할 수 있습니다 :

for (int i = 0; i < _count; i++) { 
    Console.WriteLine(_items[i]); 
} 

당신은 액세스 할 수있는 항목을 만들 수 있습니다 공개적으로 다음과 같이 :

public int[] Items { get { return _items; } } 

public int Count { get { return _count; } } 

업데이트

배열 크기를 자동으로 늘리려면 배열 크기가 너무 작아지면 실제 크기를 두 배로 늘리는 것이 가장 좋습니다. 속도와 메모리 효율성 사이에서 좋은 절충안입니다 (목록이 내부적으로 작동하는 방식입니다).

private int[] _items = new int[8]; 
private int _count; 

public void Add(int x) 
{ 
    if (_count == _items.Lengh) { 
     Array.Resize(ref _items, 2 * _items.Length); 
    } 
    _items[_count++] = x; 
} 

그러나 배열 참조가 변경된다는 점에 유의하십시오. 따라서이 배열 참조의 영구 복사본을 다른 곳에 저장해서는 안됩니다.

관련 문제