2015-08-20 55 views
1

我正在編寫一個簡單的愛計算器在迅速。它的工作方式是需要兩個人的姓名,並將字母數加在一起。然後它找到共同字母的數量,從總數中減去它,並將總數除以總數以得到機會的百分比。例如:如何找到兩個單詞的常見字母?

  • 人1:查爾斯
  • 人2:簡

  • 查爾斯+簡= 11個字母總

  • 查爾斯和簡有一個A和在普通的E,所以從11中減去兩個E和兩個A,我們得到7. 7除以11就是63%。

我的問題是找到共同字母的最佳方式是什麼?

我對swift相當陌生,但之前我曾與客觀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

這個問題有重複,他們是有用的,但他們都使用基金會的方法。

這裏有一個簡單的方法來找到兩個詞的常用字母純雨燕2.0採用Set:,

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手段:

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" 
} 

只有雨燕1.2略有不同它只計算唯一的字母,而不是計數的次數。

爲此,您將不得不使用類似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 
相關問題