2024-06-21
This commit is contained in:
217
Writerside/topics/Array.md
Normal file
217
Writerside/topics/Array.md
Normal file
@@ -0,0 +1,217 @@
|
||||
# 배열
|
||||
|
||||
## 배열의 생성
|
||||
|
||||
괄호 안에 배열의 요소를 나열해서 배열을 생성합니다.
|
||||
|
||||
```perl
|
||||
@array = ('Charlie', 'Steve', 34);
|
||||
```
|
||||
|
||||
또는, **qw//** 연산자를 사용해서 배열을 만들 수도 있습니다. qw 연산자는 공백 문자나 줄바꿈을 기준으로 구분된 문자열의 배열을 생성합니다.
|
||||
|
||||
```perl
|
||||
@array = qw/Charlie Steve 37/;
|
||||
```
|
||||
|
||||
### 연속된 범위의 배열 (Range)
|
||||
|
||||
일련의 숫자나 문자의 배열은 다음과 같이 생성할 수 있습니다.
|
||||
|
||||
```perl
|
||||
@range = (0..10);
|
||||
print "@range\n"; # 0 1 2 3 4 5 6 7 8 9 10
|
||||
|
||||
@range = (a..f);
|
||||
print "@range\n"; # a b c d e f
|
||||
```
|
||||
|
||||
## 배열의 요소에 접근
|
||||
|
||||
0부터 시작되는 인덱스를 사용해서 배열의 각 항목에 접근할 수 있습니다. 특이하게, 인덱스에 음수를 사용할 수도 있습니다. 배열의 요소는 스칼라 타입이기 때문에 배열의 요소를 참조할 때에는 변수명 앞에 `$`가 붙습니다.
|
||||
|
||||
```perl
|
||||
@array = qw/일 월 화 수 목 금 토/;
|
||||
print "$array[0]\n"; # 일
|
||||
print "$array[6]\n"; # 토
|
||||
print "$array[-1]\n"; # 토
|
||||
```
|
||||
|
||||
## 배열의 크기
|
||||
|
||||
배열을 스칼라 변수에 할당하면 배열의 크기가 할당됩니다. 이 때, 배열의 크기는 유효한 요소의 갯수가 아니라, 배열의 물리적인 크기입니다. 또는, `$size = scalar @array;`처럼 사용할 수도 있습니다. `$#array`는 배열의 마지막 인덱스를 나타냅니다.
|
||||
|
||||
```perl
|
||||
@array = (1,2,3);
|
||||
$array[10] = 10;
|
||||
|
||||
# 배열을 스칼라 변수에 할당하면 배열의 크기가 할당됩니다.
|
||||
$size = @array; # 또는, $size = scalar @array;
|
||||
# 배열의 마지막 인덱스
|
||||
$max_index = $#array;
|
||||
|
||||
print "Size: $size\n"; # 11
|
||||
print "Max index: $max_index\n"; # 10
|
||||
```
|
||||
|
||||
## 배열 요소의 삽입과 제거
|
||||
|
||||
- push
|
||||
|
||||
배열의 맨 뒤에 새로운 요소를 추가합니다.
|
||||
|
||||
- pop
|
||||
|
||||
배열에서 맨 마지막 요소를 꺼냅니다. 꺼낸 요소는 배열에서 삭제됩니다.
|
||||
|
||||
- shift
|
||||
|
||||
배열에서 첫 번쨰 요소를 꺼냅니다. 꺼낸 요소는 배열에서 삭제됩니다.
|
||||
|
||||
- unshift
|
||||
|
||||
배열의 맨 앞에 새로운 요소를 추가합니다. 새로운 배열의 크기를 반환합니다.
|
||||
|
||||
|
||||
```perl
|
||||
@array = (1, 2, 3);
|
||||
|
||||
push (@array, 4); # 괄호는 없어도 됩니다.
|
||||
# (1,2,3,4)
|
||||
push (@array, (5, 6, 7));
|
||||
# (1,2,3,4,5,6,7)
|
||||
print "Array: ".scalar @array.": (".join(', ', @array).")\n";
|
||||
```
|
||||
|
||||
```perl
|
||||
$val = pop @array; # $val == 7
|
||||
# (1,2,3,4,5,6)
|
||||
```
|
||||
|
||||
```perl
|
||||
$val = shift @array; # $val == 1
|
||||
# (2,3,4,5,6)
|
||||
```
|
||||
|
||||
```perl
|
||||
$new_size = unshift @array, (0,1); # $new_size == 7
|
||||
# (0,1,2,3,4,5,6)
|
||||
```
|
||||
|
||||
## 배열의 결합
|
||||
|
||||
배열 안에 배열을 넣으면 하나의 평평한 배열로 합쳐집니다.
|
||||
|
||||
```perl
|
||||
@array = (1,2,(3,4,5));
|
||||
# (1,2,3,4,5)
|
||||
```
|
||||
|
||||
## 부분 배열
|
||||
|
||||
```perl
|
||||
@days = qw/일 월 화 수 목 금 토/;
|
||||
@weekdays = @days[1,2,3,4,5]; # (월,화,수,목,금)
|
||||
# 또는, 범위 연산자를 사용해서
|
||||
@weekdays = @days[1..5]; # (월,화,수,목,금)
|
||||
```
|
||||
|
||||
### Splice
|
||||
|
||||
- splice(@array, offset, length)
|
||||
|
||||
어떤 배열에서 주어진 인덱스부터 길이만큼을 제거합니다. 제거된 부분 배열을 반환합니다.
|
||||
|
||||
- splice(@array, offset, length, new_items)
|
||||
|
||||
어떤 배열에서 주어진 인덱스부터 길이만큼을 제거하고, 새로운 데이터로 채웁니다. 제거된 부분 배열을 반환합니다.
|
||||
|
||||
|
||||
```perl
|
||||
@days = qw/일 월 화 수 목 금 토/;
|
||||
@weekdays = splice (@days, 1, 5); # array, offset, length
|
||||
# @days == (일,토)
|
||||
# @weekdays == (월,화,수,목,금)
|
||||
```
|
||||
|
||||
```perl
|
||||
@days = qw/일 월 화 수 목 금 토/;
|
||||
@weekdays = splice (@days, 1, 5, (1..3)); # array, offset, length, new_items
|
||||
# @days == (일,1,2,3,토)
|
||||
# @weekdays == (월,화,수,목,금)
|
||||
```
|
||||
|
||||
## 배열 <=> 문자열
|
||||
|
||||
### split
|
||||
|
||||
문자열을 배열로 쪼갤 때는 split을 사용합니다.
|
||||
|
||||
- split(SEPARATOR, EXPRESSION, LIMIT)
|
||||
- LIMIT은 반환되는 배열의 최대 길이를 제한할 때 사용됩니다.
|
||||
|
||||
```perl
|
||||
@array = split(',', 'Charlie,Steve,Jane');
|
||||
# (Charlie, Steve, Jane)
|
||||
@array = split('-', 'Charlie-Steve-Jane', 2);
|
||||
# (Charlie, Steve-Jane)
|
||||
```
|
||||
|
||||
### join
|
||||
|
||||
배열의 각 항목을 문자열로 합칠 때는 join을 사용합니다.
|
||||
|
||||
- join(SEPARATOR, LIST)
|
||||
|
||||
```perl
|
||||
$str = join(', ', @array);
|
||||
```
|
||||
|
||||
## 정렬
|
||||
|
||||
### sort
|
||||
|
||||
sort는 배열을 정렬할 때 사용합니다. 정렬된 새로운 배열을 반환합니다. 문자열을 정렬할 때에는 ASCII 코드 순으로 정렬되므로 대소문자에 주의해야 하며, 숫자인 경우에도 별도의 서브루틴이 필요합니다.
|
||||
|
||||
- sort LIST
|
||||
|
||||
- sort SUBROUTINE LIST
|
||||
|
||||
별도의 서브루틴을 명시해서 정렬 방법을 지정할 수 있습니다.
|
||||
|
||||
|
||||
```perl
|
||||
@array = qw/Chicken Pizza Steak Noodle Cola Cider/;
|
||||
print "Before sort: @array\n";
|
||||
|
||||
@array = sort @array;
|
||||
print "After sort: @array\n"; # Chicken Cider Cola Noodle Pizza Steak
|
||||
```
|
||||
|
||||
```perl
|
||||
my @array = (1,5,30,7,3,62,9,3);
|
||||
@array = sort {$a <=> $b} @array; # 우주선 연산자는 숫자의 비교에 사용됩니다.
|
||||
# $a, $b는 sort() 함수에서 정의한 글로벌 변수입니다.
|
||||
```
|
||||
|
||||
## 존재 여부
|
||||
|
||||
- exists ITEM
|
||||
|
||||
배열의 어떤 요소가 유효한지를 확인하려면 exists를 사용합니다.
|
||||
|
||||
```perl
|
||||
@array = (1..3);
|
||||
if(exists($array[7])){
|
||||
print "exists.\n";
|
||||
} else {
|
||||
print "not exists.\n";
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
## 특수 변수
|
||||
|
||||
### $[
|
||||
|
||||
PERL의 배열은 0부터 시작됩니다. 하지만 만일, `$[ = 1;`이라고 해두면 모든 배열의 첫 번째 인덱스는 1이 됩니다.
|
||||
Reference in New Issue
Block a user