Swift地图(_ :)扩展为Set()?
发布时间:2020-12-14 05:41:08 所属栏目:百科 来源:网络整理
导读:let numberSet = Set(1...11) let divideSet = numberSet.map({ $0 / 10 }) //Error: Set does not have a member named map :( Swift 1.2支持无序集合的Set(),但map(_ :)似乎不适用于集合,所以我决定在我的操场上变得聪明,并尝试: let stringSet = Set(map
let numberSet = Set(1...11) let divideSet = numberSet.map({ $0 / 10 }) //Error: Set does not have a member named map :( Swift 1.2支持无序集合的Set(),但map(_ :)似乎不适用于集合,所以我决定在我的操场上变得聪明,并尝试: let stringSet = Set(map(numberSet,{ String($0)})) println(stringSet) stringSet = ["2","11","1","8","6","4","3","9","7","10","5] 这似乎很有效. extension Set { func map<U>(transform: (T) -> U) -> Set<U> { return Set(Swift.map(self,transform)) } } Error: "couldn't find initialiser for Set(T) that accepts argument of type U" 我认为有一个很好的理由为什么它不起作用,像这样的例子: let smarDividSet = Set(map(numberSet,{$0 / 2})) println(smarDividSet) smartDividSet = "[5,2,4,1,3]” //Somehow elements is the Set are going missing. 任何关于如何扩展的想法可以使用map(_ :)可靠?
你几乎在那里由于某种原因,通用类型的
必须明确指定返回的集合: extension Set { func map<U>(transform: (T) -> U) -> Set<U> { return Set<U>(Swift.map(self,transform)) } } 例: let numberSet = Set(1...11) let divideSet = numberSet.map { $0 / 2 } println(divideSet) // [5,3] 由于整数除法,所得到的集合元素较少 let floatdivideSet = numberSet.map { Double($0) / 2.0 } println(floatdivideSet) // [4.0,5.0,4.5,5.5,2.0,3.0,3.5,2.5,1.5,1.0,0.5] 另一个可能的实现是 extension Set { func map<U>(transform: (T) -> U) -> Set<U> { return Set<U>(lazy(self).map(transform)) } } 这里lazy(self)返回一个LazyForwardCollection 更新:Swift 2和3改变了很多.通用 还有一些很好的论据,关于一个集合的问题 – >设置映射(如不同的元素映射到相同的结果). extension Set { func setmap<U>(transform: (Element) -> U) -> Set<U> { return Set<U>(self.lazy.map(transform)) } } 例: let numberSet = Set(1...11) let divideSet = numberSet.setmap { $0 / 2 } print(divideSet) // [5,3] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |