简体   繁体   中英

How to access values from nested Dictionaries: Swift

Quick question. Lets say for instance that I want to create a data model for the following:

A list that populates with grocery stores that I go to, and then stores a date each time I go to any given grocery store, and within each date entry it stores the items that I purchased.

For example:

             Costco -> June 1, 2016 -> Water
                                    -> Beer

                    -> June 8, 2016 -> Hot dogs
                                    -> Chips

             Target -> June 1, 2016 -> Dish Soap
                                    -> Shampoo

                    -> June 8, 2016 -> Bananas
                                    -> Bagels

How best would I arrange this into a data model?

Is it possible to start with the following?:

var dataModel = [String: [String: [String]]]()

Using this dictionary inside a dictionary, I can't figure out how to access the array under any given "Grocery store -> Date" profile.

Disclaimer: I'm very new to Swift so forgive the ignorance. I have read Apple's documentation on dictionaries and it didn't help.

Yes, having a dictionary of dictionaries is definitely possible (though at that point you might want to consider using a class or struct instead).

You could initialize it using: var dataModel = [String: [String: [String]]]()

Accessing it would like something like this:

dataModel["Costco"]?["June 1, 2016"] //returns an optional of type String

That accessor

Though again, I would definitely recommend you look into creating a struct to encapsulate this data. With a struct, you could create your own GroceryStore struct to use as a key and you could use proper NSDate objects as keys for the second layer.

Best of luck and let me know if you have any questions!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM