当前位置: 首页 > 面试题库 >

将项作为字典值添加到数组

霍浩皛
2023-03-14
问题内容

我试图找出最好的方式Swift添加值到Array这是一个ValueDictionary。我想建立一个按联系人名字的首字母排序的联系人字典。例如[A:[Aaron,Adam等…],B:[Brian,Brittany等],…]

我发现此功能:

updateValue(_:forKey:)

并尝试在循环中使用它:

for contact in self.contacts.sorted() {
    self.contactDictionary.updateValue([contact], forKey: String(describing: contact.characters.first))           
}

但是当我尝试使用它时,它用一个新数组替换了现有数组。我知道我可以手动检查字典中的键是否存在,如果存在,则检索数组,然后附加一个新值,否则添加新的键/值对,但是我不确定Swift是否提供了更简单的方法/更好的方法。

任何见解将不胜感激!


问题答案:

您可以使用reduce(into:)方法(Swift4),如下所示:

let contacts = ["Aaron", "Adam", "Brian", "Brittany", ""]
let dictionary = contacts.reduce(into: [String:[String]]()) { result, element in
    // make sure there is at least one letter in your string else return
    guard let first = element.first else { return }
    // create a string with that initial
    let initial = String(first)
    // initialize an array with one element or add another element to the existing value
    result[initial] = (result[initial] ?? []) + [element]
}
print(dictionary)   // ["B": ["Brian", "Brittany"], "A": ["Aaron", "Adam"]]

如果您使用的是Swift3或更早版本,则需要在闭包内部创建一个可变的结果字典:

let contacts = ["Aaron", "Adam", "Brian", "Brittany", ""]
let dictionary = contacts.reduce([String:[String]]()) { result, element in
    var result = result
    guard let first = element.first else { return result }
    let initial = String(first)
    result[initial] = (result[initial] ?? []) + [element]
    return result 
}
print(dictionary)   // ["B": ["Brian", "Brittany"], "A": ["Aaron", "Adam"]]

请注意,结果未排序。字典是无序集合。如果需要对字典进行排序并返回(键,值)元组的数组,则可以按以下方式使用按键排序:

let sorted = dictionary.sorted {$0.key < $1.key}
print(sorted)

“ [[(键:” A“,值:[” Aaron“,”亚当“]),(键:” B“,值:[” Brian“,” Brittany“])] \ n”



 类似资料:
  • 问题内容: 如果满足某些条件,您将如何向字典中的值添加一个常数,例如1。 例如,如果我有字典: 如果我只是想将整数1添加到字典中的每个值,那么它将dict这样更新: 当我使用以下代码(其中Cur_FID是字典“ 0”中的第一个)时,它的值为5?它应该给我4。 我想为所有值加1,但是在第一次字典更新做一些奇怪的操作时就停在这里。 问题答案: 一种简单的方法是使用对象,在大多数情况下,您可以像普通字典

  • 问题内容: Swift中的数组支持+ =运算符,可将一个数组的内容添加到另一个数组。有没有简单的方法可以做到这一点的字典? 例如: 问题答案: 您可以为定义运算符,例如

  • 问题内容: 我想将一个项目添加到Python中的现有字典中。例如,这是我的字典: 我想添加一个新项目,例如: 我该如何实现? 问题答案: default_data[‘item3’] = 3 像py一样容易。 另一个可能的解决方案: 如果您想一次插入多个项目,这很好。

  • 问题内容: 我想将属性值添加到查询中的xml字段中。我的例子如下 我希望我的最终结果看起来像这样 问题答案: 如果需要选择数据,则可以使用xquery: 甚至更简单:

  • 问题内容: 我想自动将键添加到Python字典(如果还不存在)。例如, 如果密钥不存在,如何自动创建密钥? 问题答案: 使用:

  • 在我开始之前--我看了以下链接,没有一个对我起作用(我的假设是我做错了什么): > https://appmediation.com/how-to-add-local-libraries-to-gradle/ 如何向build.gradle文件添加本地.jar文件依赖项? 在我的Gradle Java项目中使用本地jar作为依赖项 如何向build.gradle.kt文件添加本地.jar文件依赖项