배열Array 초기화 / 리스트List 초기화 / 배열의 복사 / 리스트의 복사
- C# Study/C# 케이스 스터디
- 2019. 7. 7. 23:07
배열의 초기화
# 길이 20인 배열 초기화
int[] IntArray = new int[20];
리스트 초기화
# 길이 20인 리스트 초기화
List<int> IntList = new List<int>(new int[20]);
- 정석적인 방법은 for문을 돌려서 Add를 20번하는 것이다.
- 위 방법은 20짜리 길이의 배열을 하나 더 만들고 이를 생성용으로만 사용하는 방식이라 메모리를 낭비한다.
- 같은 값을 넣기 위해서는 어차피 for문을 이용해야 하니 초기값으로 만들경우에만 사용할 것.
- LINQ의 array.ToList();를 사용할 수도 있다.
# 요소로 초기화
List<int> testNums = new List<int>() { 7, 7, 7, 7 } ;
# LINQ를 활용하기
- 값을 5로 채운 길이 10의 리스트 초기화
List<int> myList = Enumerable.Repeat(5, 10).ToList();
배열의 복사
int[] Array2 = new int[4];
int[] Array = Array2.Clone() as int[];
Clone은 object로 형변환 되서 나오기 때문에 (int[]) 같이 해당 자료형으로 캐스팅 해서 사용해야 함.
리스트의 얕은 복사
항목들을 복사하지만, 내부적으로는 같은 객체이기 때문에 복사한 리스트에서 수정하면 원본 리스트의 내용도 같이 바뀜
List<int> listB = new List<int>(listA);
Linq를 사용하는 경우에는 아래의 코드도 가능.
List<int> listB = listA.ToList();
리스트의 깊은 복사
내부 참조의 깊은 복사. 내부에 참조가 있는 경우, 아래와 같이 내부의 참조까지 복사해야한다.
(deepCopy constructor는 별도로 만들어야 한다)
List<MyClass> listB = listA.Select(x => new MyClass(x)).ToList();
List<MyClass> listC = listA.ConvertAll(x => new MyClass(x));
ConvertAll을 사용하기도 한다.
배열 -> 리스트
public List<int> testList;
public int[] testArray;
testList = new List<int>(testArray);
리스트 -> 배열
public List<int> testList;
public int[] testArray;
testArray = testList.ToArray();
반복 데이터 채우기 (LINQ)
Linq의 Enumerable.Range(int32, int32)를 사용한다면 특정 구간의 숫자를 채우는 범위 컬렉션을 만들 수 있다!
주의할 점은 첫번째 인자 ~ 두번째 인사 사이를 정수로 채우는 것이 아니라
첫번째 인자를 시작으로 두번째 인자 횟수만큼 생성한다.
Enumerable.Range(2, 3) 이라면 => 2, 3 이 아니라 2, 3, 4 가 나오는 것.
using System.Linq;
List<int> myList = Enumerable.Range(0, 10).ToList();
int[] myArray = Enumerable.Range(0, 10).ToArray();
연속 데이터 채우기 (LINQ)
같은 값으로 컬렉션을 채워야하는 경우도 존재한다.
이때 사용할 수 있는 것이 Enumerable.Repeat.
List<int> myList = Enumerable.Repeat(-1, 10).ToList();
'C# Study > C# 케이스 스터디' 카테고리의 다른 글
List<T> Sort (0) | 2019.12.10 |
---|---|
확장 메서드 (0) | 2019.10.02 |
C# 글자 표기 문자 형식 string.Format / ToString (0) | 2019.09.07 |
Rectangular Array (다차원 배열) / Jagged Array(가변 배열) (0) | 2019.07.07 |
유니티 C#에서 함수의 인자가 너무 많을 때 (1) | 2019.06.18 |