Сумма и для цикла вместе в Swift - PullRequest
0 голосов
/ 08 октября 2018

Я хочу знать, сколько общих символов в заданных наборах.

Input: J = "aA", S = "aAAbbbb"
Output: 3

В решении Python для этого следующим образом:

lookup = set(J)
return sum(s in lookup for s in S)

У меня есть следующее решение в Swift этоработает, но выглядит слишком многословно.Я хочу научиться этому более короткому пути.

class Solution {
    func checkInItems(_ J: String, _ S: String) -> Int {
        let lookup = Set(J) ;
        var sy = 0;
        for c in S
        {
            if lookup.contains(c)
            {
               sy += 1;                
            }
        }        
        return sy;
    }
}

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

В качестве небольшого варианта ответа Ш_Кана вы можете использовать reduce для подсчета количества подходящих элементов без создания промежуточного массива:

func checkInItems(_ J: String, _ S: String) -> Int {
    let lookup = Set(J)
    return S.reduce(0) { lookup.contains($1) ? $0 + 1 : $0 }
}

В Swift 5 будетcount(where:) метод последовательности для этой цели, см. SE-0220 count(where:).

0 голосов
/ 08 октября 2018

Можно попробовать

class Solution {
  func checkInItems(_ J: String, _ S: String) -> Int {
    let lookup = Set(J)
    return S.filter { lookup.contains($0) }.count
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...