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])
这给了我一个错误。
我意识到可能有一种更简单的方法可以做到这一点,但我在研究中找不到任何东西。任何帮助表示赞赏!
答案 0 :(得分:3)
一种简单而快捷的方法是使用stride
和advance
函数映射字符数组:
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)]))
}
}