【问题标题】:Swift 3 comparing array indexesSwift 3 比较数组索引
【发布时间】:2017-02-20 14:03:54
【问题描述】:

如果我有两个数组并且我想比较它们的索引,例如:

let var a1 = ["1", "2", "3"]
let var a2 = ["3", "2", "3"]

我想打印一些东西来说明哪个索引不一样,例如:

if a1[0] != a2[0] && a1[1] == a2[1] && a1[2] == a2[2]{
print("Index 0 is not the same.")

我是否必须再写 7 个这样的语句来显示所有正确/所有错误/索引 1 和 1 错误等的所有 8 种可能性?

谢谢!

【问题讨论】:

    标签: arrays swift indexing


    【解决方案1】:

    你可以像这样获取所有索引:

    let diffIndex = zip(a1, a2).enumerated().filter {$1.0 != $1.1}.map {$0.offset}
    

    解释:

    • zip 产生一系列对
    • enumerated() 为序列添加索引
    • filter 只保留具有不同值的对
    • map 获取索引,并构建结果序列。

    运行这个

    let a1 = ["1", "2", "3", "4"]
    let a2 = ["3", "2", "3", "5"]
    

    这会产生一个序列[0, 3]

    【讨论】:

      【解决方案2】:

      试试这个

      let a1 = ["1", "2", "3"]
      let a2 = ["3", "2", "3"]
      
      let result = zip(a1, a2).map({ $0 == $1 }).reduce(true, {$0 && $1})
      

      【讨论】:

        【解决方案3】:

        使用for 循环:

        for i in 0..<a1.length {
            if a1[i] != a2[i] {
                print("Index \(i) is not the same")
            }
        }
        

        通常,如果您发现自己重复相同的代码但编号不同,您可以用 for 循环替换它。

        【讨论】:

        • 谢谢!如果值是字符串而不是整数,同样的 for - 循环会起作用吗?
        • @3Beard 这个循环不对a1a2元素的类型做任何假设,只要可以应用!=操作符。
        【解决方案4】:

        你当然可以这样做:

        let a1 = ["1", "2", "3"]
        let a2 = ["3", "2", "3"]
        
        var compareResult : [String] = [String]()
        
        if a1.count == a2.count { // Need to check they have same length
        
            for count in 0..<a1.count {
                let result : String = a1[count] == a2[count] ? "MATCH" : "MISMATCH"
                compareResult.append(result)
            }
        
            print(compareResult)
            // Do something more interesting with compare result...
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-01-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-09-07
          • 2017-05-14
          • 2021-12-10
          • 1970-01-01
          相关资源
          最近更新 更多