Sự khác biệt giữa từ điển và mảng, đặc biệt khi làm việc với các tệp PLIST là gì? Những lợi thế của việc sử dụng cái này qua cái khác là gì? Cảm ơn!Sự khác nhau giữa từ điển và mảng là gì?
Trả lời
Cả hai NSDictionary
và NSArray
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.
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.
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ị).
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 NSDictionary và NSArray
Đ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
Đ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.
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.
- 1. Sự khác biệt giữa Hashtable và Từ điển là gì?
- 2. Sự khác nhau giữa mảng và đối tượng là gì?
- 3. Sự khác nhau giữa IEnumerable và mảng là gì?
- 4. Sự khác nhau giữa NaN và None là gì?
- 5. Sự khác nhau giữa dict() và {} là gì?
- 6. Sự khác nhau giữa hai mảng Iterations là gì?
- 7. Sự khác nhau giữa fancyLocalization và preferredLanguage là gì?
- 8. Sự khác nhau giữa WebConfigurationManager và ConfigurationManager là gì?
- 9. Sự khác nhau giữa ArrayList.clear() và ArrayList.removeAll() là gì?
- 10. Sự khác nhau giữa .serialize() và .serializeArray() là gì?
- 11. Sự khác nhau giữa pls_integer và binary_integer là gì?
- 12. Sự khác biệt thực sự giữa từ điển và bảng băm là gì?
- 13. Sự khác nhau giữa DTCPing và DTCTester là gì?
- 14. Sự khác nhau giữa vector và đỉnh là gì?
- 15. Sự khác nhau giữa Smack và aSmack là gì?
- 16. Sự khác nhau giữa NSLayoutAttributeBaseline và NSLayoutAttributeBottom là gì?
- 17. Sự khác nhau giữa `Enum.name()` và `Enum.toString()` là gì?
- 18. Sự khác nhau giữa Normalize.css và Reset CSS là gì?
- 19. Sự khác nhau giữa BSTR và _bstr_t là gì?
- 20. Sự khác nhau giữa MIPS và RISC là gì?
- 21. Sự khác nhau giữa Surfaceview và TextureView là gì?
- 22. Sự khác nhau giữa Objective-C và Cocoa là gì?
- 23. Sự khác nhau giữa .delegate() và live() là gì?
- 24. Sự khác nhau giữa BUTTON1_MASK và BUTTON1_DOWN_MASK là gì?
- 25. Sự khác nhau giữa Phing và PHPUnderControl là gì?
- 26. Sự khác biệt giữa mảng mảng và mảng đa chiều là gì?
- 27. Sự khác nhau giữa XSL Pattern và XPath là gì?
- 28. Sự khác nhau giữa ODBC và OleDB là gì?
- 29. Sự khác nhau giữa Server.MapPath và HostingEnvironment.MapPath là gì?
- 30. Sự khác nhau giữa null và System.DBNull.Value là gì?
Cảm ơn rất nhiều vì đã giải thích điều này! Nó thực sự hữu ích. –
Cảm ơn bạn. Nó đã tiết kiệm thời gian của tôi. – Raja