【问题标题】:Character in String array swift字符串数组中的字符swift
【发布时间】:2017-03-21 06:33:57
【问题描述】:

我正在尝试查找组成字符串的字母的位置。 例如,我需要知道字母“c”在单词“character”中的位置,以便进一步计算。

我试过了

for letters in Array("character".characters) {
    if "c".contains(String(letters)) {
    if let i = Array("character".characters).index(of: letters) {
    print(i) 
    }
   } else { print("wrong letter") }
  }

// Console:
0
wrong letter
wrong letter
wrong letter
wrong letter
0
wrong letter
wrong letter
wrong letter

我从控制台得到的只是两个零;它只给了我“字符”中第一个 c 的索引,而不是第二个 c 的索引。 它打印出“错误字母”的事实意味着循环运行正常;它甚至可以识别第二个 c 的位置,只是没有给出正确的索引。

【问题讨论】:

    标签: swift string character indexof for-in-loop


    【解决方案1】:

    您的代码无法按预期工作,因为

    Array("character".characters).index(of: letters)
    

    总是在字符串中找到第一个个字母,例如 搜索“c”时,这将始终返回索引零。

    您可以使用enumerated() 来简化任务, 它为您提供字符以及相应的索引, 并使所有Array() 转换和通过index(of:) 搜索变得不必要:

    let word = "character"
    let search = Character("c")
    
    for (index, letter) in word.characters.enumerated() where letter == search {
        print(index)
    }
    // 0  5
    

    或者,如果您希望将索引作为数组:

    let indices = word.characters.enumerated()
        .filter { $0.element == search }
        .map { $0.offset }
    
    
    print(indices) // [0, 5]
    

    这可以进一步优化为

    let indices = word.characters.enumerated()
        .flatMap { $0.element == search ? $0.offset : nil }
    

    如果字符串是 large 那么其他方法可能更适合, 参见例如Find all indices of a search term in a string.

    【讨论】:

      【解决方案2】:

      你可以这样做

      let test  = "character"
      let arr = Array(test.characters)
      for i in 0..<arr.count {
      if arr[i] == "c"{
      
          print(i)
          } else { print("wrong letter") }
      
      }
      output
      // 0
      //wrong letter
      //wrong letter
      //wrong letter
      //wrong letter
      //5
      //wrong letter
      //wrong letter
      //wrong letter
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-01-08
        • 2015-09-11
        • 2016-03-02
        • 2018-10-13
        • 2016-11-20
        • 2020-09-02
        相关资源
        最近更新 更多