【发布时间】:2019-03-07 23:55:33
【问题描述】:
我在 Swift 中为 Collection 编写了以下扩展,它从起始索引返回每个其他元素的新 Collection。
extension Collection {
func everyOtherElement(from theIndex: Int = 0) -> [Element] {
if theIndex >= self.count { return self as! [Element] }
let start = self.index(startIndex, offsetBy: theIndex)
let end = self.endIndex
var everyOther = [Element]()
var iter = start
while iter != end {
everyOther.append(self[iter])
let next = index(after: iter)
if next == end { break }
iter = index(after: next)
}
return everyOther
}
}
可能有改进代码的方法,但我的问题是当集合是字典时。该扩展有效,但返回一个元组数组 [(key: key, value: value)] 我希望扩展返回字典。
我已经尝试过 Dictionary(uniqueKeysWithValuesMethod) ,它一旦应用于everyOtherElement 方法的返回就可以正常工作,但我似乎无法找到直接实现它的方法。
var myDictionary = ["EN" : "Cheers", "SV" : "Skåll", "ES" : "Salud" ].everyOtherElement()
// returns [(key: "EN", value: "Cheers"),(key: "ES", value: "Salud")]
Dictionary(uniqueKeysWithValues: myDictionary.map { ($0.key, $0.value)})
// returns ["EN" : "Cheers", "ES" : "Salud" ]
感谢您的帮助!
【问题讨论】:
-
你的函数做不同的事情。您快进到给定的索引,然后删除所有其他项目。在字典的上下文中,这两个部分都没有意义,字典没有定义。
-
self as! [Element]您不能强制将所有集合转换为元素数组。不等于Array<Characters>的字符串 -
你明确返回一个数组
-
感谢大家抽空回复!!!我确实返回了一个数组
[Element],因为我没有找到任何其他编译方式。因此我最初的问题是:换句话说,如果可能的话,我如何更改代码以便它也适用于字典!
标签: swift dictionary collections