Programing

C #에서 알 수없는 길이의 배열

lottogame 2020. 10. 16. 07:03
반응형

C #에서 알 수없는 길이의 배열


방금 C #을 배우기 시작했고 배열 소개에서 변수를 배열로 설정하는 방법을 보여 주었지만 할당시 배열의 길이를 지정해야하는 것 같습니다. 따라서 배열의 길이를 모르면 어떻게해야하나요? 정렬?


배열에는 길이가 지정되어야합니다. 여러 요소를 허용하려면 List클래스를 사용하십시오 .

예를 들면 :

List<int> myInts = new List<int>();
myInts.Add(5);
myInts.Add(10);
myInts.Add(11);
myInts.Count // = 3

List<>길이를 알 수없는 '배열'을 구축하는 데 사용 합니다.

를 사용 List<>.ToArray()하지 않고 실제 배열을 반환하는 데 사용 합니다 List.

var list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(3);
var array = list.ToArray();

약간의 배경 정보 :

말했듯이 동적 컬렉션을 원하면 List<T>. 내부적으로 List는 스토리지에도 배열을 사용합니다. 이 배열은 다른 배열과 마찬가지로 고정 된 크기를 갖습니다. 배열이 크기가있는 것으로 선언되면 변경되지 않습니다. 에 항목을 List추가하면 배열에 추가됩니다. 처음에는 List길이가 16이라고 생각하는 배열로 시작합니다. 17 번째 항목을에 추가하려고 List하면 새 배열이 할당되며 이는 이전 배열의 두 배인 것입니다. , 그래서 32 항목. 그런 다음 이전 배열의 내용이 새 배열로 복사됩니다. 따라서 List외부 관찰자에게는 동적으로 보일 수 있지만 내부적으로도 규칙을 준수해야합니다.

그리고 짐작 하셨겠지만, 배열의 복사 및 할당은 자유롭지 않으므로 가능한 한 적은 수를 목표로해야 List하며 배열의 초기 크기를 (의 생성자에서 ) 지정할 수 있습니다 . 완벽한 시나리오에서는 원하는 모든 것을 담을 수있을만큼 충분히 큽니다. 그러나 이것은 마이크로 최적화이며 그것이 당신에게 중요하지 않을 것 같지만 실제로 무엇을하고 있는지 아는 것은 항상 좋습니다 .


크기가 변수로 설정된 배열을 만들 수 있습니다.

int size = 50;
string[] words = new string[size]; // contains 50 strings

그러나 100 단어가 필요하다고 결정하면 나중에 그 크기를 변경할 수 없습니다. 크기가 정말 동적이어야한다면 다른 종류의 데이터 구조를 사용해야합니다. 시도해보십시오 List.


ArrayList.NET 1.x에서는 if를 사용하고 List<yourtype>.NET 2.0 또는 3.x 에서는 if를 사용합니다 .

System.Collections에서 검색하십시오 System.Collections.Generics.


데이터가 고유 한 경우 사전을 살펴볼 수도 있습니다. 그러면 작업 할 두 개의 열이 제공됩니다.

사용자 이름, 총 청구서

값만 검색하고 업데이트 할 수있는 많은 내장 도구를 제공합니다.


var yummy = new List<string>();
while(person.FeelsHappy()) {
    yummy.Add(person.GetNewFavoriteFood());
}
Console.WriteLine("Sweet! I have a list of size {0}.", list.Count);
Console.WriteLine("I didn't even need to know how big to make it " +
    "until I finished making it!");

배열 대신 일반 목록을 시도하십시오.


간단히 말해 컬렉션 및 제네릭을 사용하십시오.

모든 C # 개발자에게 필수이며 배우는 데 시간을 할애 할 가치가 있습니다. :)


위에서 자세히 설명했듯이 일반 List <>가 가장 좋은 방법입니다.

.NET 1. *에 갇혀 있다면 대신 ArrayList 클래스를 사용해야합니다. 이것은 컴파일 타임 유형 검사가 없으며 캐스팅을 추가해야합니다.

후속 버전은 스레드 안전 변형을 포함하여 다양한 변형을 구현했습니다.


목록 대신 배열을 사용해야하는 경우 런타임에 크기가 계산되는 배열을 만들 수 있습니다.

예를 들어 n x n 크기의 2 차원 배열을 원합니다. n은 런타임에 사용자로부터 얻습니다.

int n = 0;
bool isInteger = int.TryPase(Console.ReadLine(), out n);
var x = new int[n,n];

참고 URL : https://stackoverflow.com/questions/599369/array-of-an-unknown-length-in-c-sharp

반응형