相关疑难解决方法(0)

在Swift中将String拆分为数组?

说我在这里有一个字符串:

var fullName: String = "First Last"
Run Code Online (Sandbox Code Playgroud)

我想在白色空间上拆分字符串,并将值分配给它们各自的变量

var fullNameArr = // something like: fullName.explode(" ") 

var firstName: String = fullNameArr[0]
var lastName: String? = fullnameArr[1]
Run Code Online (Sandbox Code Playgroud)

此外,有时用户可能没有姓氏.

arrays string split ios swift

653
推荐指数
23
解决办法
49万
查看次数

在Swift中,一个有效的函数,它根据谓词将数组分成2个数组

注意:我目前仍在使用Swift 2.2,但也对Swift 3解决方案开放

我正在寻找创建一个非常接近的函数filter,除了它保持不匹配的结果,并维护排序顺序.例如,假设您想过滤掉数组中可被3整除的数字,并且仍然保留不能被3整除的数字列表.


选项1:使用 filter

使用filter,您只能得到可被3整除的数字列表,原始列表保持不变.然后,您可以使用相反的谓词再次过滤原始列表,但这是不必要的第二遍.代码如下所示:

let numbers = [1,2,3,4,5,6,7,8,9,10]
let divisibleBy3 = numbers.filter { $0 % 3 == 0 } // [3,6,9]
let theRest = numbers.filter { $0 % 3 != 0 }      // [1,2,4,5,7,8,10]
Run Code Online (Sandbox Code Playgroud)

确实,这是非常可读的,但是对于我而言,它执行2遍的事实似乎效率低下,特别是如果谓词更复杂的话.这是实际需要的两倍多的检查.

选项2:separateCollection扩展中使用自定义功能

我的下一次尝试是扩展Collection并制作一个我打电话的功能separate.此函数将获取集合并一次一个地浏览元素,并将它们添加到匹配列表或不匹配列表中.代码如下所示:

extension Collection {
    func separate(predicate: (Generator.Element) -> Bool) -> (matching: [Generator.Element], notMatching: [Generator.Element]) {
        var groups: ([Generator.Element],[Generator.Element]) = ([],[])
        for element in self {
            if predicate(element) {
                groups.0.append(element) …
Run Code Online (Sandbox Code Playgroud)

arrays swift

16
推荐指数
4
解决办法
3492
查看次数

标签 统计

arrays ×2

swift ×2

ios ×1

split ×1

string ×1