2015-08-20 2 views
1

Я кодирую простой калькулятор любви в быстром. То, как это работает, это имена двух человек и добавляет количество букв вместе. Затем он находит количество общих букв, вычитает их из общей суммы и делит это число на общую сумму, чтобы получить процент шанса. Например:Как найти общие буквы для двух слов?

  • Person 1: Charles
  • Person 2: Джейн

  • Чарльз + Jane = 11 букв всего

  • Чарльз и Джейн есть А и Е в общем, так вычесть два E и два A из 11, мы получаем 7. 7, разделенные на 11, составляют 63%.

Мой вопрос - это то, что является лучшим способом найти письма вместе?

Я довольно новый, чтобы быстро, но я работал с объективом C раньше. Вот мой код:

// 
// ViewController.swift 
// Love Calculator 
// 
// Created by Caden Farley on 8/18/15. 
// Copyright (c) 2015 Caden Farley. All rights reserved. 
// 

import UIKit 

class ViewController: UIViewController { 
    var total = 0 
    @IBOutlet var person1: UITextField! 
    @IBOutlet var person2: UITextField! 
    @IBOutlet var resultText: UILabel! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    @IBAction func buttonPressed() { 
     self.view.endEditing(true) 
     let string1 = person1.text 
     let string2 = person2.text 

     total = count(string1) + count(string1) 
     resultText.text = "\(total)" 
    } 
} 

ответ

1

Есть дубликаты для этого вопроса, и они полезны, но все они используют методы Foundation.

Вот простой способ найти общие буквы для двух слов в чистом Swift 2.0 с помощью Set:

let person1 = "Charles" 
let person2 = "Jane" 

let p1Set = Set(person1.lowercaseString.characters) 
let p2Set = Set(person2.lowercaseString.characters) 

let common = Array(p1Set.intersect(p2Set)).map({ String($0) }) 

print(common.count) // 2 

for letter in common { 
    print(letter) // "e", "a" 
} 

только немного отличается в Swift 1.2:

let person1 = "Charles" 
let person2 = "Jane" 

let p1Set = Set(person1.lowercaseString) 
let p2Set = Set(person2.lowercaseString) 

let common = Array(p1Set.intersect(p2Set)).map({ String($0) }) 

println(common.count) // 2 

for letter in common { 
    println(letter) // "e", "a" 
} 

Конечно, используя Set средства что он учитывает только уникальные буквы, а не количество вхождений.

Для этого вам нужно будет использовать что-то вроде NSCountedSet (но для этого уже есть примеры для SO).

0
func compatability(a: String, _ b: String) -> Int { 
    let (aC, bC) = (a.lowercaseString.characters, b.lowercaseString.characters) 
    let matches = { (col: String.CharacterView, set: Set<Character>) in 
    col.reduce(0) { (sum, c) in set.contains(c) ? sum + 1 : sum } 
    } 
    let tot = aC.count + bC.count 
    let com = matches(aC, Set(bC)) + matches(bC, Set(aC)) 
    return (tot - com) * 100/tot 
} 

compatability("Charles", "Jane") // 63 
Смежные вопросы