2016-12-12 39 views
-2

Creted数组是这样的:如何检查如果一个元件是在含有包含数组的字典的字典?

var MyArray: [String:[String:[Int]]] = [ 
"xx": ["x1": [1, 2, 3], "x2": [4, 5, 6], "x3": [7, 8, 9]], 
"yy": ["y1": [10, 11, 12], "y2": [13, 14, 15], "y3": [16, 17, 18]] 

] 

我想检查是否例如“XX”是。试过,但它有一个错误:

if [MyArray].contains("xx"{ 

        } 

但它autocorrects这个

if [MyArray].contains(where: "xx"{ 

        } 

又说他有一个错误, 任何想法?

+7

正如指出的[在你前面的问题(http://stackoverflow.com/questions/41103511/how-to-save-a-multidimensional-阵列到userdefaults),'MyArray'不是数组,这是一个字典。 – rmaddy

+1

你得到的错误(顺便说一句,它*威力*是有用的,告诉我们错误说什么),是因为你的语法完全是拙劣的。你为什么要将你的“数组”(这是一个字典)包装成一个新的数组? “包含”调用的右括号在哪里? – EmilioPelaez

回答

0

因为你的“阵”是一本字典,你确定无论是其(关键"xx")中的一个存在与否,一个非常简单的办法就是试图访问该字典的特定键。

var myDictionary: [String:[String:[Int]]] = [ 
    "xx": ["x1": [1, 2, 3], "x2": [4, 5, 6], "x3": [7, 8, 9]], 
    "yy": ["y1": [10, 11, 12], "y2": [13, 14, 15], "y3": [16, 17, 18]] 
] 

if let _ = myDictionary["xx"] { 
    print("Dictionary contains a key 'xx'") 
} 

W.r.t.您尝试使用contains应用于词典:另一种方法是明确检查如果key的收集到字典contains您的特定键:

if myDictionary.keys.contains("xx") { 
    print("Dictionary contains a key 'xx'") 
} 

或者,在(key, element)元组的每个直接只使用key字典项检查给定key是否存在于字典:

if myDictionary.contains(where: { $0.key == "xx" }) { 
    print("Dictionary contains a key 'xx'") 
} 
1

我建议你使用可选的结合:

var MyArray: [String:[String:[Int]]] = [ 
    "xx": ["x1": [1, 2, 3], "x2": [4, 5, 6], "x3": [7, 8, 9]], 
    "yy": ["y1": [10, 11, 12], "y2": [13, 14, 15], "y3": [16, 17, 18]] 

] 

if let outerDict = MyArray["xx"] { 

    for entry in outerDict { 
     print(entry) 
    } 

} 

输出:

("x1", [1, 2, 3]) 
("x3", [7, 8, 9]) 
("x2", [4, 5, 6]) 
+1

这不是可选的链接。这是可选的展开。 – rmaddy

+0

好吧我固定不正确的术语,感谢 –

+0

关于命名@AlexS,你可以看到[点击这里](https://stackoverflow.com/questions/25828301/how-is-swift-if-let-evaluated/38041086#38041086 ) – Honey

0

首先,MYARRAY是一本字典不是一个数组,实际上它是一本字典,其关键是字符串和value也是一个字典,其关键字是一个字符串,其值是整数数组。

所以,如果你想检查词典包含了一些关键的还是没有,你能做到这一点的,如果条件这样的:

if let value = MyArray["xx"] { 
    // do some stuff  
} 
0

,如果你不需要值Swiftiest方式:

if let _ = MyArray["xx"]{ 
    print("something or do something") 
} 

如果您需要的值做:

guard let someValue = MyArray["xx"]{ 
    return} else{ 
    someFunc(someValue) 
    someProperty = someValue 
} 
相关问题