Swift: dichiara un dizionario vuoto


178

Sto iniziando a imparare swiftseguendo l'iBook- The Swift Programming Languagesu Swift fornito da Apple. Il libro dice che per creare un dizionario vuoto si dovrebbe usare lo [:]stesso mentre si dichiara array come []:

Ho dichiarato un array vuoto come segue:

let emptyArr = [] // or String[]()

Ma dichiarando un dizionario vuoto, ottengo un errore di sintassi:

let emptyDict = [:]

Come dichiaro un dizionario vuoto?


2
strano, non ottengo alcun errore nel fare questo, posso anche chiedere il conteggio e il parco giochi mi dà 0.
Kaan Dedeoglu

il mio non dà alcun errore del compilatore anche dal runtime posso ottenere una stampa delle costanti e loro lo stampano semplicemente nelle array :() dictionary :{}istruzioni di stampa della console let arr = [] let dict = [:] println("array :\(arr)") println("dictionary :\(dict)")
nsuinteger


Risposte:


310
var emptyDictionary = [String: String]()

­

var populatedDictionary = ["key1": "value1", "key2": "value2"]

Nota : se hai intenzione di modificare i contenuti del dizionario nel tempo, dichiaralo come var(variabile). È possibile dichiarare un dizionario vuoto come let(costante), ma è inutile se si ha l'intenzione di cambiare il suo contenuto nel corso del tempo, in quanto costante non può essere modificato dopo che è stato inizializzato.


Vecchia risposta :

La creazione di un dizionario vuoto di tipo <String, String>dovrebbe apparire come segue:

var emptyDictionary = Dictionary<String, String>()

Grazie amico, funziona. Ma perché non posso dichiarare il dizionario costante se posso dichiarare un array come costante?
z22,

2
Sicuramente non potresti dichiarare un dizionario const e renderlo vuoto? AS non saresti mai in grado di aggiungere valori ad esso?
CW0007007,

1
È possibile dichiarare una matrice vuota come costante ma è inutile. Se leggi i documenti, puoi vedere che un array viene sempre dichiarato varcome ti avevo suggerito: developer.apple.com/library/prerelease/ios/documentation/Swift/…
damirstuhec

1
@ Damir179 la prima riga è chiaramente sbagliata. Non ci sono informazioni sul tipo lì quindi devi essere esplicito, altrimenti produrrai un'istanza inutilizzabile di __NSDictionaryI. Prova ad aggiungere un elemento a quello emptyDicte fallirà al momento della compilazione.
Gabriele Petronella,

1
var emptyDict: NSMutableDictionary = [:]
Jio

39

Non puoi usare [:] meno che siano disponibili informazioni sul tipo.

È necessario fornire esplicitamente in questo caso:

var dict = Dictionary<String, String>()

varsignifica che è modificabile, quindi è possibile aggiungere voci ad esso. Al contrario, se lo rendi un, letnon puoi modificarlo ulteriormente (let significa costante).

È possibile utilizzare la [:]notazione abbreviata se è possibile inferire le informazioni sul tipo, ad esempio

var dict = ["key": "value"]

// stuff

dict = [:] // ok, I'm done with it

Nell'ultimo esempio è noto che il dizionario ha un tipo Dictionary<String, String>dalla prima riga. Si noti che non è stato necessario specificarlo esplicitamente, ma è stato dedotto.


Tra le molte opzioni disponibili in Swift, la mia sintassi preferita per un semplice dict String / String è:var dict: [String: String] = [:]
Dawngerpony,

Grazie!. Dizionario <String, String> () risolto il mio problema, in realtà avevo un dizionario da Enum a MyClass. Cosa intendi con "informazioni sul tipo disponibili"?
Eduardo Reis,

32

La documentazione di Swift raccomanda il seguente modo per inizializzare un dizionario vuoto:

var emptyDict = [String: String]()

Ero un po 'confuso quando mi sono imbattuto per la prima volta in questa domanda perché risposte diverse hanno mostrato modi diversi per inizializzare un dizionario vuoto. Si scopre che in realtà ci sono molti modi in cui puoi farlo, anche se alcuni sono un po 'ridondanti o eccessivamente prolissi data la capacità di Swift di inferire il tipo.

var emptyDict = [String: String]()
var emptyDict = Dictionary<String, String>()
var emptyDict: [String: String] = [:]
var emptyDict: [String: String] = [String: String]()
var emptyDict: [String: String] = Dictionary<String, String>()
var emptyDict: Dictionary = [String: String]()
var emptyDict: Dictionary = Dictionary<String, String>()
var emptyDict: Dictionary<String, String> = [:]
var emptyDict: Dictionary<String, String> = [String: String]()
var emptyDict: Dictionary<String, String> = Dictionary<String, String>()

Dopo avere un dizionario vuoto puoi aggiungere una coppia chiave-valore come questa:

emptyDict["some key"] = "some value"

Se si desidera svuotare di nuovo il dizionario, è possibile effettuare le seguenti operazioni:

emptyDict = [:]

I tipi sono ancora <String, String>perché è così che è stato inizializzato.


Se volessi inizializzare un array di un dizionario vuoto, lo faresti come tale: var emptyDictArray = [[String: String]()] var emptyDictArray = [Dictionary<String, String>()]
Don Alejandro,

19

Utilizzare questo funzionerà.

var emptyDict = [String: String]()

Preferisco questo. Perché possiamo dichiarare un array vuoto entro var emtpyAry = [String](). Questo ha senso.
hbin,

16

Puoi semplicemente dichiararlo così:

var emptyDict:NSMutableDictionary = [:]

6

Devi dare un tipo al dizionario

// empty dict with Ints as keys and Strings as values
var namesOfIntegers = Dictionary<Int, String>()

Se il compilatore può dedurre il tipo, è possibile utilizzare la sintassi più breve

namesOfIntegers[16] = "sixteen"
// namesOfIntegers now contains 1 key-value pair
namesOfIntegers = [:]
// namesOfIntegers is once again an empty dictionary of type Int, String


4

Ci sto giocando anch'io. Sembra strano che tu possa semplicemente dichiarare un dizionario vuoto e quindi aggiungere una coppia chiave / valore in questo modo:

var emptyDictionary = Dictionary<String, Float>()
var flexDictionary = [:]
emptyDictionary["brian"] = 4.5
flexDictionary["key"] = "value" // ERROR : cannot assign to the result of this expression

Ma puoi creare un dizionario che accetta diversi tipi di valore usando il tipo "Qualsiasi" in questo modo:

var emptyDictionary = Dictionary<String, Any>()
emptyDictionary["brian"] = 4.5
emptyDictionary["mike"] = "hello"

4

Devi dichiarare esplicitamente il tipo di dati o il tipo può essere dedotto quando dichiari qualcosa in Swift.

Swift 3

L'esempio seguente dichiara un dizionario con chiave come Inttipo e il valore come Stringtipo.

Metodo 1: inizializzatore

let dic = Dictionary<Int, String>()

Metodo 2: sintassi abbreviata

let dic = [Int:String]()

Metodo 3: Dizionario letterale

var dic = [1: "Sample"]
// dic has NOT to be a constant
dic.removeAll()

4

Swift 4

let dicc = NSDictionary()

//MARK: - This is empty dictionary
let dic = ["":""]

//MARK:- This is variable dic means if you want to put variable 
let dic2 = ["":"", "":"", "":""]

//MARK:- Variable example
let dic3 = ["name":"Shakeel Ahmed", "imageurl":"https://abc?abc.abc/etc", "address":"Rawalpindi Pakistan"]

//MARK: - This is 2nd Variable Example dictionary
let dic4 = ["name": variablename, "city": variablecity, "zip": variablezip]

//MARK:- Dictionary String with Any Object
var dic5a = [String: String]()
//MARK:- Put values in dic
var dic5a = ["key1": "value", "key2":"value2", "key3":"value3"]

var dic5b = [String:AnyObject]()
dic5b = ["name": fullname, "imageurl": imgurl, "language": imgurl] as [String : AnyObject]

or
//MARK:- Dictionary String with Any Object
let dic5 = ["name": fullname, "imageurl": imgurl, "language": imgurl] as [String : AnyObject]

//MARK:- More Easy Way
let dic6a = NSDictionary()
let dic6b = NSMutalbeDictionary()

3

Se si desidera creare un dizionario generico con qualsiasi tipo

var dictionaryData = [AnyHashable:Any]()

Grazie, finalmente perché questo è necessario per aggiungere un tipo di dizionario in seguito, non solo una stringa
Mitchell Currie

3

Di solito lo sto usando

var dictionary:[String:String] = [:]
dictionary.removeAll()

3

Dichiarazione e inizializzazione di dizionari in Swift

Dizionario di stringa

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

O

var stringDict: Dictionary<String, String> = Dictionary<String, String>()

Dizionario di Int

var stringDict: [String: Int] = [String: Int]()

O

var stringDict: Dictionary<String, Int> = Dictionary<String, Int>()

Dizionario di AnyObject

var stringDict: [String: AnyObject] = [String: AnyObject]()

O

var stringDict: Dictionary<String, AnyObject> = Dictionary<String, AnyObject>()

Dizionario of Array of String

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

O

var stringDict: Dictionary<String, Array<String>> = Dictionary<String, Array<String>>()

Matrice di dizionari di archi

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

O

var stringDict: Array<Dictionary<String, String>> = Array<Dictionary<String, String>>()

0

Puoi dichiararlo nullo con il seguente:

var assoc : [String:String]

Quindi la cosa bella è che hai già composto (nota che ho usato var e non lasciarlo, pensa a questi come mutabili e immutabili). Quindi puoi riempirlo in seguito:

assoc = ["key1" : "things", "key2" : "stuff"]

0

Puoi usare il seguente codice:

var d1 = Dictionary<Int, Int>()
var d2 = [Int: Int]()
var d3: Dictionary<Int, Int> = [Int : Int]()
var d4: [Int : Int] = [:]

-1

var dictList = String: stringa per il dizionario in rapido var arrSectionTitle = stringa per l'array in rapido


-2

È molto utile per trovare la tua strada

var dict: Dictionary = [:]


Devi usare anche la chiave e i tipi di valore.
Suragch,

-2
var parking = [Dictionary < String, Double >()]

^ questo aggiunge un dizionario per un input [stringa: doppio]

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.