2011-02-27 2 views
0

이 데이터 구조를 나타내는 가장 좋은 방법은 무엇입니까? Objective-C를 사용하여 iPhone 개발을하고 있지만 일반적으로 괜찮습니다.Objective-C에서 표 형식 데이터를 표현하는 방법

   Location1   Location2   Location3 
Location1  0     8     23 
Location2  8     0     16 
Location3  23     16    0 

내가 중첩 된 배열을 할 수 ...

table = ['Location1' => ['Location 1' => '0', 
         'Location 2' => '8', 
         'Location 3' => '23'], 
     'Location2' => ['Location 1' => '8', 
         'Location 2' => '0', 
         'Location 3' => '16'], 
     'Location3' => ['Location 1' => '23', 
         'Location 2' => '16', 
         'Location 3' => '0']] 

...하지만 난 데이터 복제의 많은 거기로이 가장 효율적인 방법입니다 확실하지 않다. 어쩌면 어떤 종류의 객체 지향적 인 방법일까요?

또한 이러한 종류의 데이터에 적합한 특수 iPhone Objective-C 데이터 구조가 있습니까?

+0

이 배열은 2 차원 배열을 포함합니다. http : //stackoverflow.com/questions/ 638129/how-to-declare-a-2 차원 배열의 문자열 유형 in-obj ective-c – madmik3

답변

1

데이터를 포함하는 다른 NSArray 개체를 포함하는 NSArray 개체 인 배열 배열을 사용할 수 있습니다. 이 방법의 단점은 각 행과 열에 일정한 크기가 있도록 배열의 크기를 제한하는 것은 프로그램에 달려 있다는 것입니다. 데이터가 정적이고 plist 가능 (문자열, 숫자, 날짜, 데이터, 배열 또는 사전 만 포함)하는 경우 plier 파일에 저장하고 [NSArray arrayWithContentsOfFile:]을 사용하여 한 번에로드하는 것이 좋습니다.

Location1과 같은 키를 사용하여 데이터에 액세스하려면 NSArray 개체 대신 NSDictionary 개체를 사용해야합니다. 그러나이 작업을 수행하면 데이터에 순차적으로 액세스하거나 숫자 인덱스로 액세스 할 수 없게됩니다 (항상 키를 통해 액세스해야합니다).

또한 데이터를 변경할 수있는 경우 (즉, 데이터를 변경하려는 경우) NSMutableArray 또는 NSMutableDictionary을 사용해야합니다.

+0

데이터가 변경되지 않기 때문에 (아마도 그렇게 언급했을 것입니다), plists는 좋은 방법처럼 보입니다. 나는 그들에 대한 조사를 할 것이다. (나는 오래 전에 아이폰 앱을 개발하지 않았고, 전에 아이폰 앱을 사용한 적이 없다.) 감사! – user116170

+0

빠른 질문 : 많은 데이터가 없습니까? 그것이 많다면, plists가 한꺼번에 많이로드되기 때문에 plists가 최선의 방법이 아닐 수도 있습니다. 빨리, 예,하지만 많은 데이터가 아닙니다. – BillEccles

1

멤버 location1, location2 및 location3을 사용하여 위치의 NSobject 클래스를 만드는 것이 좋습니다. 그리고 나서 위치 객체를 사용하여 다음과 같은 값을 얻을 수 있습니다 :
[locationobj location1]; 나중에에
만들 수있는 NSArray거나 이러한 개체의 mutablearray

1

당신은 2D 인덱스와 1D 지수 또는 태그 사이의 변환을 사용하여 내부적으로있는 NSMutableArray를 사용하는 Mutable2DArray 클래스를 만들 수 있습니다

index1D = numColumns * row2DIndex + column2DIndex; 

을 표 형식의 데이터 형식 및 기타 요구 사항 (재사용, 확장 성, 효율성, 메모리 사용 등)에 따라 내부적으로 일반 C 배열을 사용할 수도 있습니다.

관련 문제