这个字典迭代在swift中意味着什么?

时间:2016-03-06 03:06:15

标签: swift dictionary iteration

swfit中的字典和迭代操作

apply plugin: 'java'
compileJava {
    targetCompatibility = '1.7'
}

结果是Brian,Anna,Craig,Donna,

这是什么操作呢?为什么"终结者:"没有出现在结果中?

1 个答案:

答案 0 :(得分:4)

  
    

问:这个操作在做什么?

  

以下行是[String : Int]

类型的字典
let namesAndScores = ["Anna": 2, "Brian": 2, "Craig": 8, "Donna": 6]

接下来,记下循环中的以下行:

namesAndScores.keys

.keys属性为我们提供了新的数组 ,其中包含 词典中的键。例如:

let keys = ["Anna", "Brian", "Craig", "Donna"]

接下来,您只需循环遍历上面描述的数组:

for key in namesAndScores.keys {
    print("\(key), ", terminator: "")
}
  
    

问:为什么"终结者:"没有出现在结果中?

  

Terminator只是一个参数,可让您设置打印行终止符。换句话说,它允许您选择每行后打印的内容。默认情况下,它为"\n"提供了一个新行。

在您的示例中,您有:print("\(key), ", terminator: "")。将您的打印语句的终止符设置为""。您只是告诉print()函数在没有尾随换行符的情况下打印。打印您的值如下:

  

Brian,Anna,Craig,Donna,

但是,您可以将任何字符串传递到终结器参数,例如:

print("\(key), ", terminator: " -hi- ")

哪会给你这个:

  

Brian,-hi- Anna,-hi- Craig,-hi- Donna,-hi-

因此,当您只使用公共print("\(key), ")而未设置终结符时,终结符参数会获得默认值,该值等同于:

print("\(key), ", terminator: "\n") 

这会打印新行上的每个项目,如下所示:

  

布赖恩,
  安娜,
  克雷格,
  唐娜,

根据评论更新:

  
    

问:为什么Brian在安娜之前的结果是Brian在

之后          

安娜在字典中?

  

字典未分类。因此,.keys生成的数组将处于不可预测的顺序。幸运的是,您只需在for循环中添加.sort(<)即可对生成的数组进行排序。

for key in namesAndScores.keys.sort(<) {
    print("\(key), ", terminator: "")
}

打印:

  

Anna,Brian,Craig,Donna,