【问题标题】:Swift 2 - Check if an array contains a value from another smaller arraySwift 2 - 检查一个数组是否包含另一个较小数组的值
【发布时间】:2016-02-06 06:01:27
【问题描述】:

我正在尝试比较两个数组(array1, array2),如果array2 中包含特定键值,则需要将包含array2 值的array1 中的键值与其'indexPath'一起打印出来。

我的代码几乎可以工作,但是应用程序崩溃了,因为在通过键时,array2 超出了范围,因为它包含的索引少于 array1

如果其他数组更小,如何让代码查找匹配项?

let array1 = [["aaa","bbb","ccc","ddd","eee"], ["fff","ggg","hhh","matched","iii"], ["lll","mmm","nnn","ooo","ppp"], ["666","777","888","999","000"] ] //4 elements

let countArray1 = array1.enumerate()

let array2 = [["111","222"], ["333","444"], ["matched","555"]] // 3 elements


for (index, element) in countArray1{

    let containedValue = array1[index].contains(array2[index][0])

    if (containedValue) == true{

        print("The index of the contained value is: ????") //error

    }
}  

【问题讨论】:

  • 您是否只需要知道给定值是否存在于两个数组中?
  • 只要array2中的值包含在array1中
  • 数组总是二维的吗?
  • 是的,它总是[[String]]。但是里面的值是生成的,所以元素可以改变。 Array2也可以为空

标签: arrays xcode swift2 contains


【解决方案1】:

我会将较小的二维数组转换为一维数组,然后循环遍历较大数组的两个维度并使用NSArray.contains:

免责声明:此代码未经测试。 @Community:如果您偶然发现此问题并注意到错误或可以更好地编写的内容,请发表评论或编辑。我使用 Obj-C 比使用 Swift 多。

//convert 2D array to 1D
func from2Dto1D(array: NSArray) -> NSArray {
    var newArr = NSMutableArray()
    for (d1) in array {
        for (d2) in d1 {
            newArr.append(d2)
        }
    }
    return newArr as NSArray
}
func hasMatch(array1: NSArray, array2: NSArray) -> boolean {
    var bigger: NSArray
    var smaller: NSArray
    if (array1.count > array2.count){
        bigger = array1
        smaller = from2Dto1D(array2)
    }else{
        bigger = array2
        smaller = from2Dto1D(array1)
    }
    for (d1) in bigger{
        for (item) in d1 {
            if (smaller.contains(item)){
                print("Match found");
                return true
            }
        }
    }
    return false
}

【讨论】:

    【解决方案2】:

    您可以展平两个数组,然后枚举它们以检查对象匹配的索引。

    let array1 = [["aaa","bbb","ccc","ddd","eee"], ["fff","ggg","hhh","matched","iii"], ["lll","mmm","nnn","ooo","ppp"], ["666","777","888","999","000"] ] //4 elements
    
    let array2 = [["111","222"], ["333","444"], ["matched","555"]] // 3 elements
    
    let flat1 = Array(array1.flatten())       
    let flat2 = Array(array2.flatten())
    
    for (index1,object1) in flat1.enumerate() {
        for (index2,object2) in flat2.enumerate() {
            if object2 == object1 {
                print("index1 is: \(index1). Index 2 is \(index2)")
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-06
      • 1970-01-01
      • 2015-10-28
      • 2017-05-30
      • 1970-01-01
      相关资源
      最近更新 更多