Xcode 9.4.1 - Как пропустить остаток набора и перейти к следующему набору - PullRequest
0 голосов
/ 07 декабря 2018

Хотя это может не быть хорошим примером, но, как говорится в вопросе, я бы хотел сравнить randomNo с наборами в numberSets.Тем не менее, в тот момент, когда найдено одно число, я хочу знать, есть ли способ перейти к следующему набору.

В итоге randomNo содержит 2 числа, которые можно найти в том же наборе, это "6"и" 9 ".Я хочу знать, смогу ли я найти «6» в тот момент, когда я смогу аннулировать оставшуюся часть набора и перейти к следующему набору без циклического перебора остальных чисел в наборе

init() {
    let numberSet1 : Set<Int> = [1,2,3,4,5]
    let numberSet2 : Set<Int> = [6,7,8,9,10]
    let numberSet3 : Set<Int> = [11,12,13,14,15]

    let randomNo = [3,6,9,11]

    numberSets = [numberSet1,numberSet2,numberSet3]
}

func searchFor(){
    for num in randomNo{
        for set in numberSets{
            if set.contains(num) {
                print("The following number was found: ", num)
            }
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Во-первых, я думаю, стоит упомянуть, что в вашем примере код не циклически перебирает наборы, а не массивы наборов (randomNo, numberSets).

Если я получупроблема правильная, вам не нужно оптимизировать поиск элемента в наборе.Запрос о том, содержит ли набор элемент или нет (поиск), не является дорогой операцией и имеет сложность O(1).

Если вы хотите прекратить итерацию по numberSets, как только будет найдено первое число, просто используйте break оператор управления потоком:

func searchFor() {
    for num in randomNo {
        for set in numberSets {
            if set.contains(num) {
                print("The following number was found: ", num)
                break
            }
        }
    }
}

Надеюсь, это поможет.

0 голосов
/ 07 декабря 2018

Один из способов сделать это - continue внешний цикл:

outer: for num in randomNo{
    for set in numberSets{
        if set.contains(num) {
            print("The following number was found: ", num)
            continue outer
        }
    }
}

Другой способ - объединить все три набора:

let union = numberSet1.union(numberSet2).union(numberSet3)

print(randomNo.filter(union.contains))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...