Поиск значения в двумерном массиве - PullRequest
0 голосов
/ 22 января 2020

Как мне найти значение "Мексика" в двумерном массиве ниже?

// 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 ]

2 голосов
/ 22 января 2020

Вот функция, которую я реализовал, которая проверяет, указан ли элемент в многомерном массиве, и возвращает общее количество найденных элементов:

  • , используя .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 голос
/ 22 января 2020

Используйте filter(_:) и contains(_:), чтобы получить конкретный group в groups array, который содержит Mexico или любое другое значение, например

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

И в случае, если вы просто хотите, чтобы значение true / false указывало на то, существуют ли «Мексика» в группах или нет, вы можете использовать flatMap(_:) вместе с contains(_:) т.е.

let contains = groups.flatMap({ $0 }).contains(searchText)
0 голосов
/ 22 января 2020

Не ясно, хотите ли вы вернуть массив или просто bool, если строка присутствует. Поскольку люди уже ответили, как получить массив результатов, вот решение, если вы хотите найти, присутствует ли слово в двумерном массиве или нет, и вернуть Bool.

 let searchText = "Mexico"
 let result = groups.reduce(false) { (_, group) -> Bool in
      group.contains(searchText)
 }
 print(result) // true 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...