【问题标题】:Splitting a string of letters into 3s in swift快速将一串字母分成3个
【发布时间】:2015-03-27 16:56:24
【问题描述】:

这里是 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])

这给了我一个错误。

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

【问题讨论】:

标签: python arrays swift split


【解决方案1】:

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

let name = Array("ATAGASSTSSGASTA")

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

【讨论】:

  • 它可能相关也可能不相关,但这给出了Slice&lt;Character&gt; 的数组,而不是String 的数组。 (这就是我在stackoverflow.com/a/28560013/1187415 中使用 substringWithRange 的原因)
  • 如果 OP 对 String 数组感兴趣,您可以在映射期间从每个 Slice&lt;Character&gt; 生成一个字符串。 String(name[$0..&lt;advance($0, 3, name.count)]).
  • 就我而言,这非常相关。我要去我们 substringWithRange 因为我需要字符串数组。感谢您的所有回答!非常感谢!!!
【解决方案2】:

这很冗长,但确实可以:

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。不确定,还没有,但是文档使它看起来像那样。

【讨论】:

    【解决方案3】:
    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)]))
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-22
      • 1970-01-01
      • 2021-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-06
      • 2019-05-03
      相关资源
      最近更新 更多