서수 타입을 배열 첨자로 사용하기
고정 길이 배열 Constant-length arrays
열거형, 사용자 정의 구간 서수 타입 모두 배열 첨자로 사용할 수 있어 배열 인덱스 범위를 유연하게 설정할 수 있습니다.
열거형을 배열 첨자로 쓰는 예시
type
// 1. 일반 숫자 구간 첨자 0~9
TArrayOfTenStrings = array [0..9] of string;
// 2. 1부터 시작하는 첨자 범위 1~10
TArrayOfTenStrings1Based = array [1..10] of string;
// 3. 사용자 정의 서수 타입을 배열 첨자로 활용
TMyNumber = 0..9;
TAlsoArrayOfTenStrings = array [TMyNumber] of string;
// 4. 열거형을 직접 배열 첨자로 사용 (가장 자주 쓰임)
TAnimalKind = (akDuck, akCat, akDog);
TAnimalNames = array [TAnimalKind] of string;
var
AnimalNameArr: TAnimalNames;
begin
AnimalNameArr[akDuck] := '오리';
AnimalNameArr[akCat] := '고양이';
AnimalNameArr[akDog] := '강아지';
end;
Code language: PHP (php)
IntToStr는 표준 변환 함수로 SysUtils 유닛에 정의되어 있습니다. 역할: 정수 숫자를 문자열로 변환.
전체 예제 코드
{$ifdef FPC} {$mode objfpc} {$H+} {$endif}
{$codepage utf8}
program ArrayIndexDemo;
uses
SysUtils; // IntToStr 사용을 위해 필수로 포함
type
// 1. 일반 숫자 구간 첨자 0~9
TArrayOfTenStrings = array [0..9] of string;
// 2. 1부터 시작하는 첨자 범위 1~10
TArrayOfTenStrings1Based = array [1..10] of string;
// 3. 사용자 정의 서수 타입을 배열 첨자로 활용
TMyNumber = 0..9;
TAlsoArrayOfTenStrings = array [TMyNumber] of string;
// 4. 열거형을 직접 배열 첨자로 사용 (가장 자주 쓰임)
TAnimalKind = (akDuck, akCat, akDog);
TAnimalNames = array [TAnimalKind] of string;
var
// 인덱스 0~9 배열 변수 선언
Arr0To9: TArrayOfTenStrings;
// 인덱스 1~10 배열 변수 선언
Arr1To10: TArrayOfTenStrings1Based;
// 사용자 정의 서수 인덱스 배열 변수
ArrCustomIdx: TAlsoArrayOfTenStrings;
// TMyNumber 타입 반복 변수 I
I: TMyNumber;
// 열거형 인덱스 배열 변수
AnimalNameArr: TAnimalNames;
begin
// 1. 0~9 인덱스 배열 사용법
Arr0To9[0] := '0번 요소'; // 값 할당
Arr0To9[5] := '중간 요소';
Writeln(Arr0To9[0]); // 값 출력
// 2. 1 시작 인덱스 배열, 0으로 접근 불가
Arr1To10[1] := '첫 항목';
Arr1To10[10] := '마지막 항목';
Writeln(Arr1To10[10]);
// 3. 사용자 정의 서수 TMyNumber를 첨자로 반복 순회
for I := Low(TMyNumber) to High(TMyNumber) do
begin
ArrCustomIdx[I] := '순서' + IntToStr(I);
end;
Writeln(ArrCustomIdx[3]);
// 열거 값을 첨자로 열거 배열에 값 할당 예시
AnimalNameArr[akDuck] := '오리';
AnimalNameArr[akCat] := '고양이';
AnimalNameArr[akDog] := '강아지';
end.Code language: PHP (php)
컴파일 시 경고 메시지 2개 발생
D:\fpcdemo>fpc mydemo.dpr
Free Pascal Compiler version 3.2.2 [2021/05/15] for i386
Copyright (c) 1993-2021 by Florian Klaempfl and others
Target OS: Win32 for i386
Compiling mydemo.dpr
mydemo.dpr(55,35) Warning: Implicit string type conversion from "AnsiString" to "UnicodeString"
mydemo.dpr(55,33) Warning: Implicit string type conversion with potential data loss from "UnicodeString" to "AnsiString"
Linking mydemo.exe
63 lines compiled, 0.2 sec, 68464 bytes code, 4276 bytes data
2 warning(s) issued
D:\fpcdemo>mydemo
0번 요소
마지막 항목
순서3Code language: CSS (css)
집합 타입
Sets, 내부 구현은 비트 필드 bit-fields
집합은 열거형 또는 서수 타입을 기반으로 정의하며 여러 열거 값을 한번에 저장할 수 있고 집합 연산, 요소 추가/삭제를 지원합니다.
{$ifdef FPC} {$mode objfpc} {$H+} {$endif}
{$codepage utf8}
program ArrayIndexDemo;
type
TAnimalKind = (akDuck, akCat, akDog);
// 열거형 기반 집합 타입 정의
TAnimals = set of TAnimalKind;
var
A: TAnimals;
begin
A := []; // 빈 집합 리터럴
A := [akDuck, akCat]; // 여러 요소 직접 할당
A := A + [akDog]; // 집합 합집합 (요소 추가)
A := A * [akCat, akDog]; // 집합 교집합 (양쪽 공통 요소만 유지)
Include(A, akDuck); // 내장 프로시저: 단일 요소 추가
Exclude(A, akDuck); // 내장 프로시저: 단일 요소 삭제
end.
Code language: PHP (php)
집합 자주 사용하는 연산 설명
[]:빈 집합 리터럴+:합집합, 두 그룹 요소 병합*:교집합, 양쪽에 공통으로 존재하는 요소 추출Include(집합, 요소):안전하게 요소 추가Exclude(집합, 요소):안전하게 요소 삭제
Previous: 열거형