2012-02-23 70 views

Trả lời

31

Cả hai NSDictionaryNSArray là các lớp thu thập, tức là nhóm cùng các đối tượng khác.

NSArray là một 'bộ sưu tập được sắp xếp' - mọi mục trong bộ sưu tập có chỉ số nguyên, do đó, có một thứ tự rõ ràng cho các mục. Nếu bạn hoán đổi thứ tự các mục trong bộ sưu tập thì bộ sưu tập không còn là 'giống nhau' vì thứ tự khác nhau. Một đối tượng có thể xuất hiện nhiều hơn một lần trong bộ sưu tập.

Một NSSet là một 'bộ sưu tập không có thứ tự' - mỗi mục xuất hiện trong một túi, thứ tự không quan trọng và một đối tượng chỉ có thể tồn tại một lần trong túi.

Từ điển NSD là một 'bộ sưu tập được lập chỉ mục' - mọi mục trong bộ sưu tập đều có khóa và có thể được truy lục bằng khóa đó. Một đối tượng có thể xuất hiện nhiều lần, trong đó các khóa khác nhau có thể trỏ đến cùng một đối tượng, nhưng một khóa chỉ có thể xuất hiện một lần. Từ điển cũng là một dạng 'bảng băm' nếu bạn có nền tảng khoa học máy tính.

Khi phân tích cú pháp PLIST, mảng và từ điển là các loại chính bạn xử lý. Khi bạn chỉnh sửa PLIST trong Xcode - nếu bạn đặt thứ gì đó làm kiểu Mảng, thì tất cả con của nó được liệt kê là "Mục 0, Mục 1, Mục 2 ..." trong khi nếu bạn đặt nó làm loại Từ điển, thì đó là trẻ em là các cặp khóa: giá trị.

Một trường hợp sử dụng quan trọng đối với các loại chênh lệch như sau.

Hãy tưởng tượng ứng dụng tạp chí có chứa một số bài viết. Thứ tự của các bài viết là quan trọng, và vì vậy bạn sẽ lưu trữ mỗi bài viết trong một mảng. Nếu bạn muốn thay đổi thứ tự của các bài viết, bạn sẽ thay đổi thứ tự của mảng trong plist.

Các bài viết có thể được đại diện bởi Từ điển, có thể chứa các khóa như "TextFile", "Background", "ArticleType". Bạn sử dụng từ điển vì bạn có thể thêm thông tin vào từ điển tại một số điểm trong tương lai và cơ chế khóa: giá trị giúp mã của bạn dễ hiểu.

+0

Cảm ơn rất nhiều vì đã giải thích điều này! Nó thực sự hữu ích. –

+0

Cảm ơn bạn. Nó đã tiết kiệm thời gian của tôi. – Raja

4

Mảng chỉ là danh sách các đối tượng được sắp xếp. Từ điển lưu trữ cặp khóa-giá trị.

Ví dụ:

Array: obj1, obj2, ob3, ... 

điển:

{ 

    @"Name": @"Bob" 

    @"Age": 20 (but NSDictionary can only store objects, so that would be a NSNumber) 

} 

Không có lợi thế hay bất lợi, họ chỉ là hai cấu trúc dữ liệu, và bạn sử dụng một trong những bạn cần.

2

Từ điển kết hợp khóa với giá trị (đối tượng) và không giữ thứ tự các mục. Truy cập mảng được thực hiện theo chỉ mục - thứ tự được giữ nguyên. PLIst thêm khả năng sử dụng XML để xác định dữ liệu (các cặp khóa, giá trị).

-2

NSDictionary không giữ lại các đối tượng 'giá trị' của nó, nhưng NSMutableArray giữ lại các đối tượng được thêm vào nó. Để biết thêm thông tin NSDictionaryNSArray

+1

Điều này không chính xác - NSDictionary giữ lại các giá trị của nó, nhưng không giữ lại các giá trị của nó. – ikuramedia

4

Điểm khác biệt chính là cách bạn có thể truy cập trong đó.

Cả hai mảng và từ điển là các vùng chứa và có thể được đọc theo trình tự (ví dụ: các mảng có thể được liệt kê theo một chỉ mục và từ điển bằng một khóa). Nhưng trong khi mảng duy trì trật tự giữa các đối tượng, từ điển thì không.

Ngoài ra, với từ điển bạn có khả năng truy cập một đối tượng cụ thể với một khóa cụ thể theo cách thân thiện với người dùng hơn (một bộ nhớ). Ví dụ: trong từ điển bạn biết chắc chắn rằng với một khóa cụ thể, hãy nói "văn bản", được liên kết với một đối tượng cụ thể, ví dụ: NSString. Điều tương tự có thể hợp lệ cho một mảng nhưng với một số khó khăn. Ví dụ, làm thế nào bạn chắc chắn rằng tại chỉ số 0 có đối tượng cụ thể NSString?

Về câu hỏi của bạn và theo như tôi biết (kể từ Xcode 4), plists có làm đối tượng gốc từ điển. Để biết thêm thông tin, hãy xem how-do-you-change-a-plists-root-object-type-to-nsarray-in-xcode-4.

Hy vọng điều đó sẽ hữu ích.

-1

NSDictionary là tiện ích mà bạn muốn truy cập một giá trị khóa cụ thể. NsArray rất hữu ích khi bạn muốn truy cập dữ liệu chuỗi.

Các vấn đề liên quan