在swift中将一串字母拆分成3s

时间:2015-03-27 16:56:25

标签: python arrays swift split

Swift新手在这里。我正在尝试将我的一些python代码转换为swift并且我卡在我需要将一串字母分成数组并且每个项目为3个字母的位置:

例如我的python代码如下:

name = "ATAGASSTSSGASTA"
threes =[]
for start in range(0, len(name),3):
   threes.append(name[start : start + 3])
print threes

对于swift ive来说就是这样:

var name = "ATAGASSTSSGASTA"
let namearr = Array(name)
let threes = []
threes.append(namearr[0...3])

这给了我一个错误。

我意识到可能有一种更简单的方法可以做到这一点,但我在研究中找不到任何东西。任何帮助表示赞赏!

3 个答案:

答案 0 :(得分:3)

一种简单而快捷的方法是使用strideadvance函数映射字符数组:

let name = Array("ATAGASSTSSGASTA")

let splitName = map(stride(from: 0, to: name.count, by: 3)) {
    String(name[$0..<advance($0, 3, name.count)])
}

答案 1 :(得分:0)

这非常冗长,但它完成了这项工作:

let name = "ATAGASSTSSGASTA"

let array = reduce(name, [String]()) {
    switch $0.last {
    case .Some(let last) where countElements(last) < 3:
        var array = $0
        array[array.endIndex-1].append($1)
        return array
    case .Some(_), .None:
        return $0 + [String($1)]
    }
}

编辑:在Swift 1.2中,我认为countElements已更改为count。不确定,还没有,但文件使它看起来那样。

答案 2 :(得分:0)

var nucString = "aatttatatatattgctgatctgatctEOS"
let nucArrayChar = Array(nucString)
var nucArray: [String] = []
var counter: Int = nucArrayChar.count

if counter % 3 == 0 {
    for var startNo = 0; startNo < counter; startNo += 3 {
    println("\(nucArray)\(startNo)")
    nucArray.append(String(nucArrayChar[(startNo)...(startNo + 2)]))
    }
}