Objective-C 학습편 07 - NSArray 및 NSMutableArray
NSArray
NSMutableArray
쾌속 매거
NSArray
NSArray는 정적 배열, 즉 변수가 없는 배열로 일단 만들어진 후에는 그 중의 요소를 추가하거나 삭제하거나 수정할 수 없다.NSArray는 NSObject를 계승하여 일련의 질서정연한 대상의 집합을 관리하는데 사용되며, 대상이 그룹의 위치 (인덱스) 를 통해 대상에 접근할 수 있다.C 언어와 마찬가지로, 그룹의 원소의 인덱스는 0에서 시작됩니다.수조에서 같은 종류의 대상을 저장할 수도 있고, 다른 종류의 대상을 저장할 수도 있다.그러나 nil을 저장할 수 없습니다. nil은 수조가 끝난 표지로 간주되고 시스템은 방법의 끝에 자동으로 생성됩니다.
주의: NSArray에는 대상 형식의 데이터만 저장할 수 있고 C 언어의 기본 데이터 형식, 예를 들어 int,float 등은 저장할 수 없습니다.
NSArray의 일반적인 방법
창설
1. 빈 그룹 init 만들기
편리한 구조기 방법array
NSArray *arr = [[NSArray alloc] init];
NSArray *arr0 = [NSArray array];
주의: 변하지 않는 그룹은 만들기만 하면 내용을 수정할 수 없지만, 그룹 포인터는 바꿀 수 있고, 다시 가리킬 수 있습니다.빈 그룹을 만든 후 내용이 없습니다. 아무런 의미가 없는 것 같지만, 그룹 포인터는 다시 가리키는 데 사용할 수 있습니다.
2. 객체가 있는 배열 initWithObject 사용자 정의:
NSArray *arr = [[NSArray alloc] initWithObjects:@"a", @"b", @"c", nil];
NSLog(@"%@", arr);
편리한 구조자 메서드 배열arrayWithObjects:
NSArray *arr1 = [NSArray arrayWithObjects:@"d", @"e",@"f", nil];
NSLog(@"%@", arr1);
3. 기존 배열의 객체를 사용하여 새 배열 initWithArray를 초기화하고 반환합니다.
NSArray *arr3 = [[NSArray alloc] initWithArray:arr];
NSLog(@"%@", arr3);
Array WithArray:
NSArray *arr4 = [NSArray arrayWithArray:arr1];
NSLog(@"%@", arr4);
4. 방문
// count
NSUInteger count = arr1.count; // arr1.count [arr1 count]
NSLog(@"count = %lu", count);
// firstObject
NSString *firstObject = arr1.firstObject;
// lastObject
NSString *lastObject = arr1.lastObject;
NSLog(@"fistObject = %@ lastObject = %@", firstObject, lastObject);
// objectAtIndex:
NSString *str = [arr objectAtIndex:0];
NSLog(@"%@", str);
5.정렬sortedArrayUsingSelector: (SEL) comparator
NSArray의 정렬 방법은 새로운 그룹을 되돌려줍니다. 새 그룹은 구 그룹의 요소가 선택기 selector를 통해 정렬된 그룹입니다.
NSArray *array = [NSArray arrayWithObjects:@"4", @"1", @"5", @"2", @"3", nil];
NSArray *sortArray = [array sortedArrayUsingSelector:@selector(compare:)];
NSLog(@"%@", sortArray);
인쇄 결과:
2015-11-29 19:43:36.314 Myself[804:76839] (
1,
2,
3,
4,
5
)
sortedArrayUsingSelector: (SEL)comparator 방법을 이용하여 그룹의 대상을 하나하나 비교하고 비교한 결과에 따라 새로운 그룹을 생성합니다.
배열 대상을 비교할 때 선택기comparator가 지정한 방법을 사용합니다. 선택기는 입력 매개 변수를 요구하고 되돌아오는 값은 NSComparisonResult 유형입니다. 예를 들어 NSString의 NSArray를 정렬하려면 선택기는 NSString의 방법compare를 사용할 수 있습니다.
NSArray *newArray = [anArray sortedArrayUsingSelector:@selector(compare:)];
NSMutableArray
NSMutableArray 가변 배열은 NSArray에서 상속되기 때문에 NSArray에서 정의한 모든 방법을 사용할 수 있습니다.NSMutable Array 배열에 저장된 내용을 변경할 수 있습니다. 삭제 바꾸기 추가
창설
가변 배열의 초기화 initWithCapacity:<#(NSUInteger)#>(NSInteger는 배열의 길이를 지정함)
편리한 구조기 방법arrWithCapacity:<#(NSUInteger)#>
NSMutableArray *mArr = [[NSMutableArray alloc] initWithCapacity:0];
NSMutableArray *mArr2 = [NSMutableArray arrayWithCapacity:0];
추가
1. 가변 배열에 배열 끝에addObject:
[mArr addObject:@"HarbingWang"];
2. 다른 배열의 요소를 배열 끝에 모두 추가하려면 addObjectsFromArray:
//예를 들어 현재 다음과 같은 그룹 insertArray가 있는데, 위에 만들어진 빈 그룹 mArr2에 추가합니다
NSArray *insertArray = [NSArray arrayWithObjects:@"Manager", @"productDog", @"marketMonkey", @"operationMouse", @"serviceCattle", @"programmingApe", @"designLion", nil];
[mArr2 addObjectsFromArray:insertArray];
NSLog(@"%@", mArr2);
인쇄 결과:
2015-11-29 20:17:21.708 Myself[836:94080] (
Manager,
productDog,
marketMonkey,
operationMouse,
serviceCattle,
programmingApe,
designLion
)
3. 지정한 위치에 요소 추가 insertObject:atIndex:
[mArr2 insertObject:@"ziChaoZhe" atIndex:6];
NSLog(@"%@", mArr2);
프린트
2015-11-29 20:21:19.615 Myself[879:95624] (
Manager,
productDog,
marketMonkey,
operationMouse,
serviceCattle,
programmingApe,
ziChaoZhe,
designLion
)
* 인쇄 결과에서 알 수 있듯이 insertObject: anObject를 지정한 index 위치로 추가합니다. 뒤에 있는 요소는 순서대로 뒤로 이동합니다. index는 0과 그룹 범위 사이에 있어야 합니다. 그렇지 않으면 경계를 넘는 문제가 발생합니다. 프로그램 Crash
4. 교환 배열의 두 요소 exchange ObjectAtIndex: <#(NSUInteger)#> withObjectAtIndex: <#(NSUInteger)#>
[mArr2 exchangeObjectAtIndex:0 withObjectAtIndex:1];
5. 삭제
5. removeObjectAtIndex:
[mArr2 removeObjectAtIndex:1];
6. , , removeObject:
[mArr2 removeObject:@"Manager"];
7. removeLastObject
[mArr2 removeLastObject];
8. removeAllObjects
[mArr2 removeAllObjects];
9.정렬sortUsingSelector:
[mArr2 sortUsingSelector:@selector(compare:)];
NSLog(@"%@", mArr2);
인쇄:
2015-11-29 20:51:12.980 Myself[1013:107642] (
designLion,
marketMonkey,
operationMouse,
productDog,
programmingApe,
serviceCattle,
ziChaoZhe
)
빠른 매거forin
OC는 용기류(수조, 사전, 집합 등)를 훑어보는 데 사용되는 문법을 제공한다. 이를 빠른 매거(fast enumeration)이라고 한다. 즉, 증강형 for순환이다. 이 문법을 사용할 때 집합 중의 원소의 개수에 관심을 두지 않아도 된다. 우리는 흔히 이를forin어법이라고 부른다.구문은 다음과 같습니다.
for (<#type *object#> in <#collection#>) {
<#statements#>
}
매개변수:
<#type*object#>: 컬렉션의 객체 유형 객체 유형에 대한 포인터 변수
<#collection#>: 컬렉션 객체 이름
<#statements#>: 순환체(상응하는 처리)
장점: OC가 제공하는 빠른 매거진(증강형 for순환), 집합 중의 원소의 개수에 더 이상 관심을 기울일 필요가 없다
실행 절차: 매번 순환할 때마다 집합된 원소를 추출하여 바늘 변수에 값을 부여한다
특히 주의해야 할 것은 신속한 매거 과정에서 집합 중의 원소를 수정할 수 없기 때문에 순환체에 집합의 변화를 일으킬 수 있는 조작을 넣지 마라. 그렇지 않으면 시스템이 이상을 던질 것이다.
용기에 있는 원소를 옮겨다니는 순서는 용기의 유형과 관련이 있습니다.그룹 형식이라면 처음부터 훑어보지만, 집합이나 사전이라면, 훑어보는 순서는 용기의 내부 실현과 관련이 있다.구체적인 것은 뒤에 언급될 것이다.
for (NSString *string in mArr2) {
// [mArr5 removeObject:string]; // : was mutated while being enumerated , Crash
NSLog(@"%@", string);
}
프린트
2015-11-29 21:01:16.206 Myself[1022:111865] designLion
2015-11-29 21:01:16.206 Myself[1022:111865] marketMonkey
2015-11-29 21:01:16.220 Myself[1022:111865] operationMouse
2015-11-29 21:01:16.220 Myself[1022:111865] productDog
2015-11-29 21:01:16.220 Myself[1022:111865] programmingApe
2015-11-29 21:01:16.220 Myself[1022:111865] serviceCattle
2015-11-29 21:01:16.221 Myself[1022:111865] ziChaoZhe
초보자가 이 문법을 사용할 때 비교적 어려운 것은 첫 번째 매개 변수 <#type*object#>와 두 번째 매개 변수 <#collection#>를 어떻게 씁니까?
여기서 <#type*object#>은 변수입니다. forin은 실행할 때 이 바늘 변수에 순차적으로 값을 부여하기 때문에 이 변수의 유형은 집합 중의 대상의 유형과 일치해야 합니다. 예를 들어 상기 그룹 mArr2의 요소는 문자열 NSString 형식이기 때문에 수조형 변수string을 만들어서 받아들여야 합니다.만약 Person 대상의 변수라면 Person* 유형의 변수를 만들어서 저장해야 한다.<#collection#>은 옮겨다니는 집합이라는 것은 이해하기 쉽다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.