数组 – 在Swift中我想将两个序列“连接”到一系列元组中
发布时间:2020-12-14 05:44:16 所属栏目:百科 来源:网络整理
导读:我想加入两个(或更多)序列,然后创建一系列元组.第一个元组包含每个序列的第一个元素,第二个元组包含第二个元素等等……下面是一个示例函数,它接受两个数组并创建第三个元组数组.然后我可以使用此序列来处理map(),filter()和reduce()函数. 我的例子有效,但缺
我想加入两个(或更多)序列,然后创建一系列元组.第一个元组包含每个序列的第一个元素,第二个元组包含第二个元素等等……下面是一个示例函数,它接受两个数组并创建第三个元组数组.然后我可以使用此序列来处理map(),filter()和reduce()函数.
我的例子有效,但缺乏多种方式.它适用于不适用于所有序列的数组,当第一个序列用完元素时,它会停止生成元组.我希望nils能够在元组中找到不能再提供元素的短序列.它只适用于两个数组,我希望它适用于任意数量的序列, 部分解决方案会有所帮助.我是一个功能性编程新手,所以这个功能的正确名称也将受到赞赏.也许它已经在switfz库中我只知道它叫什么.我选择了“join”,因为它大致类似于SQL“join”,它也构建了元组(a.k.a. rows) func join<T> (s1: Array<T>,s2: Array<T>) -> Array<(T,T)> { var g1 = s1.generate(); var g2 = s2.generate(); var result:Array<(T,T)> = [] while let e1 = g1.next() { if let e2 = g2.next() { result.append((e1,e2)) } } return result } class Hamming { class func compute(input: String,against: String) -> Int { return join(Array(input),Array(against)).reduce(0){ return ($1.0 != $1.1) ? $0 + 1 : $0 } } } Hamming.compute("abcde","abcdf") // 1
已有一个名为Zip2的函数:
var first = [0,1,2,3] var second = ["zero","one","two","three"] Array(Zip2(first,second)) // (0,"zero"),(1,"one"),(2,"two"),(3,"three") 但是这个函数不用nil填充,它也使用两个传递顺序中最短的函数.请注意,它不要求两个序列之间的类型匹配,并且它需要任何序列,而不仅仅是数组. 这是我自己的Zip2WithNilPadding自定义实现: struct Zip2WithNilPadding<T: SequenceType,U: SequenceType>: SequenceType { typealias Generator = GeneratorOf<(T.Generator.Element?,U.Generator.Element?)> let first: T let second: U init(_ first: T,_ second: U) { self.first = first self.second = second } func generate() -> Generator { var generator1: T.Generator? = first.generate() var generator2: U.Generator? = second.generate() return GeneratorOf<(T.Generator.Element?,U.Generator.Element?)>() { let element1 = generator1?.next() let element2 = generator2?.next() if element1 == nil && element2 == nil { return nil } else if element1 == nil{ generator1 = nil } else if element2 == nil { generator2 = nil } return (element1,element2) } } } var first = [0,2] var second = ["zero","three","four"] Array(Zip2WithNilPadding(first,second)) 如果您对具体实施有疑问,请告诉我,我会尽力澄清.此实现还应该帮助您创建一个采用序列数组的Zip.不幸的是,在这种情况下,它们都必须是相同类型的序列,因为你不能拥有可变数量的泛型. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- ruby-on-rails – 有没有办法撤消any_instance的
- core data 的NSDate 属性类型和sqlite3的timesta
- NAND flash和NOR flash的区别详解
- 正则表达式语法规则及在Javascript和C#中的使用方
- vb.net – JSON.Net VB反序列化无法正常工作
- PostgreSQL9.5和JSONB的强大功能
- postgresql – 如何在postgres中与flyway同时创建
- net.sf.json.JSONException Property 'data&
- 动态添加综合布局---动态添加控件及将某XML动态加
- 编程基础_里氏转换的练习
热点阅读