在二维数组中搜索值

时间:2020-01-22 07:10:35

标签: swift xcode

如何在下面的二维数组中搜索“墨西哥”值?

// this is our array of arrays
var groups = [[String]]()

// we create three simple string arrays for testing
var groupA = ["England", "Ireland", "Scotland", "Wales"]
var groupB = ["Canada", "Mexico", "United States"]
var groupC = ["China", "Japan", "South Korea"]

// then add them all to the "groups" array
groups.append(groupA)
groups.append(groupB)
groups.append(groupC)

3 个答案:

答案 0 :(得分:2)

这是我实现的函数,该函数检查多维数组中是否列出了元素,并返回找到的总元素:

  • 使用.flatMap(_ :)将多维数组展平为一个级别。
  • 使用.filter(_ :)返回基于谓词允许的元素。

    import UIKit
    
    var groups = [[String]]()
    
    // we create three simple string arrays for testing
    var groupA = ["England", "Ireland", "Scotland", "Wales"]
    var groupB = ["Canada", "Mexico", "United States"]
    var groupC = ["China", "Japan", "South Korea"]
    
    // then add them all to the "groups" array
    groups.append(groupA)
    groups.append(groupB)
    groups.append(groupC)
    
    func findElementInMultiDimension(element: String) -> Int {
        var count = 0
        let _ = groups.flatMap{$0.filter { (item) -> Bool in
            if item.contains(element) {
                count = count + 1
                return true
            } else {
                return false
            }
            }}
        return count
    }
    
    findElementInMultiDimension(element: "Mexico")
    print(findElementInMultiDimension(element: "Mexico")) //prints 1
    

希望这会有所帮助:)

答案 1 :(得分:1)

使用 filter(_:) contains(_:) 获得group groups中特定的array包含Mexico或其他任何值,即

let searchText = "Mexico"
let group = groups.filter({ $0.contains(searchText) })

如果只想对组中是否存在“墨西哥”进行判断,则可以使用 flatMap(_:) contains(_:) ,即

let contains = groups.flatMap({ $0 }).contains(searchText)

答案 2 :(得分:0)

不清楚是要返回数组还是返回布尔值(如果存在字符串)。由于人们已经回答了如何获取结果数组,因此,如果您要搜索2D数组中是否存在该单词并返回Bool,则可以采用以下解决方案。

 let searchText = "Mexico"
 let result = groups.reduce(false) { (_, group) -> Bool in
      group.contains(searchText)
 }
 print(result) // true