【问题标题】:index number from Array of Strings Swift来自字符串数组 Swift 的索引号
【发布时间】:2015-11-05 06:46:57
【问题描述】:

我需要检查一个字符串的索引号是否可以被2整除。

这是我需要做的:

我有一个字符串 0BCB7A0D87AD101B500B 我需要从字符串中删除所有“0”字符,但前提是它们在字符串中是奇数。 我需要将其分解如下

0B|CB|7A|0D|87|AD|10|1B|50|0B

并且仅当它是对中的第一个字符时才删除“0”。

B|CB|7A|D|87|AD|10|1B|50|B

然后将字符串重新组合在一起

BCB7AD87AD101B50B

此代码不起作用,但这就是我正在考虑的方式。我将字符串分解成一个数组:

   var characters = Array("0BCB7A0D87AD101B500B")

    for letter in characters {
        if characters(index: Int) % 2 != 0 { // if index has a remainder after being divided by 2
           if letter == "0"{ 
           characters.removeAtIndex(index: Int)
            }
        }

    }

我就是无法分割或获取数组中字母/字符串的索引号。

【问题讨论】:

    标签: arrays string swift indexing split


    【解决方案1】:

    这可行,它使用一个单独的变量 (index) 来跟踪索引:

    var characters = Array("0BCB7A0D87AD101B500B")
    var newCharacters = Array<Character>()
    var index = 0
    for letter in characters {
        if index % 2 == 1 || letter != "0" {
            newCharacters.append(letter)
        }
        index++
    }
    var newString = String(newCharacters)
    

    【讨论】:

    • 嗯,这会产生 BCB7AD87AD181B53B349E51E9688B0000000。它已经删除了所有的 0。
    • 我认为您正在使用另一个输入字符串。
    【解决方案2】:

    解决问题的实用方法

    // zip each character with the index (enumerate)
    let charsWithIndex = enumerate("0BCB7A0D87AD101B500B")
    // filter away the unwanted characters (filter) and get rid of the indexes (map)
    let filteredCharacters = filter(charsWithIndex) { index, char in !(char == "0" && index % 2 == 0) }.map { String($0.1) }
    // put the string back together (join)
    let filteredString = "".join(filteredCharacters)
    

    【讨论】:

      【解决方案3】:

      感谢您的代码。我能够调整它以在正确的点移除。

      var characters = Array("0BCB7A0D87AD101B500B")

          var newCharacters = Array<Character>()
          var index = 1
          for letter in characters {
              if index % 2 == 0 {
                  newCharacters.append(letter)
              }
              if index % 2 != 0 && letter != "0" {
                  newCharacters.append(letter)
              }
              index++
          }
          var newString = String(newCharacters)
      

      【讨论】:

      • 不过,这正是我的代码正在做的事情。应该没有区别。我让index 从 0 开始,因为字符串位置从 0 开始。你已经拆分了 if 语句。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-24
      • 2021-01-12
      • 1970-01-01
      • 2017-04-17
      • 2019-08-18
      • 2019-05-19
      • 1970-01-01
      相关资源
      最近更新 更多