2017-01-24 4 views
0

Я пытаюсь выяснить, имеют ли ключ и его значение в словаре общие общие буквы. И ключи, и значения являются строками, и я знаю, что могу получить доступ к символам в строках, используя метод .characters, но я не уверен, как проверить, проверяет ли какой-либо из символов в одном из любых других символов в Другие.Проверка того, соответствуют ли символы в строках в словаре

Например, если бы я имел словарь домашних животных, как:

var pets = ["cat" : "dog", "rat" : "snake"] 

Сравнивая «кошка» и «собака» будет возвращать верно, потому что письма не совпадают, но сравнивая «крысу» и «змея» будет возвращать ложь потому что они разделили «а».

Я довольно новичок в кодировании, поэтому это может быть что-то очень простое, что я еще не научился.

ответ

0

Я бы создал Set из characters, а затем получить общие буквы, набрав intersection этого с другими словами. Если пересечение пустое, то нет общих букв и наоборот.

Вот как это будет выглядеть:

extension String { 
    func hasLettersInCommon(with other: String) -> Bool { 
     let selfLetters = Set(self.characters) 
     let otherLetters = other.characters 
     let commonLetters = selfLetters.intersection(otherLetters) 
     return !commonLetters.isEmpty 
    } 
} 

var pets = ["cat" : "dog", "rat" : "snake"] 

for (key, value) in pets { 
    print(key, value, key.hasLettersInCommon(with: value)) 
} 

печатает:

крыса змея правда

собака кошка ложной

+0

Это, казалось, чтобы получить меня на правильном пути. Но как насчет нечувствительности к регистру? Так что, если бы у меня была [«Коза»: «Свиньи»], я бы все же хотел знать, что они имеют письмо, хотя его верхний регистр в одном и нижнем регистре в другом. Я считаю, что текущее решение найдет ложное, потому что оно чувствительно к регистру, верно? – tjcarney89

+0

@ tjcarney89 Стройте строки перед их сопоставлением – Alexander

Смежные вопросы