Задача на массивы в swift


#1

есть массив
var results: [String] = [“Winter Summer Winter”, “Winter Spring Autumn”, “Autumn Winter Spring”]
нужно выяснить есть ли в элементах массива повторяющиеся времена год, которые могут идти не по порядку и вывести количество повторяющихся.
В данном случае их 2 [Winter Spring Autum] и [Autumn Winter Spring]
Заметка: Код должен быть универсальным, то есть могут быть не только времена года


#2
let results: [String] = ["Winter Summer Winter", "Winter Spring Autumn", "Autumn Winter Spring"]

var dict = [String: Int]()

for str in results {
    for subStr in str.split(separator: " ") {
        let key = String(subStr)
        dict[key] = dict[key, default: 0] + 1
    }
}

for (key, value) in dict where value > 1 {
    print(key)
}

#3

Если я правильно понял суть вопроса, то ваш метод не совсем верен.
Я так понимаю тут нужен аналог поискового движка, который делает фильтрацию по своеобразному весу.
Я сходу пока даже примитивное придумать не могу.
Можно попробовать найти поисковый движок с открытым кодом и посмотреть алгоритмы поиска там, как вариант.


#4

.split + .sort + ==
:grin:


#5

Я бы с удовольствием посмотрел на такое решение ))
Но автор точно указал каков должен быть результат.
В данном случае если смотреть как поисковой движок, то эти 2 элемента массива “Winter Spring Autum” и “Autumn Winter Spring” идентичны.
По хорошему тут нужен человек знающий алгоритмы поиска.

Если бы были ограничения на элементы массива, к примеру максимум по 3 слова, или сам массив не более 100-200 элементов, я бы еще мог что-то придумать за несколько проходов, но это было бы очень не эффективно.
Можно было бы составить карту всех уникальных слов, дать им числовое значение (вес), а дальше как-то это все посчитать (я пока не придумал как :slight_smile: )

P.S. пока писал ответ, пришла в голову мысль: если все элементы массива отсортировать по алфавиту, а после просто сравнить на дубликаты.
Надеюсь не это вы имели в виду


#6

это и имелось в виду ))))
разделяем элемент на массив слов и просто сортируем, потом сравниваем