String 如何找到两个单词的常用字母?
我正在用swift编写一个简单的爱情计算器。它的工作原理是取两个人的名字,并将字母数相加。然后它找到共同的字母数,从总数中减去,再除以总数得到概率百分比。例如:String 如何找到两个单词的常用字母?,string,swift,cocoa-touch,String,Swift,Cocoa Touch,我正在用swift编写一个简单的爱情计算器。它的工作原理是取两个人的名字,并将字母数相加。然后它找到共同的字母数,从总数中减去,再除以总数得到概率百分比。例如: 第一人:查尔斯 第二个人:简 查尔斯+简=总共11封信 查尔斯和简有一个A和一个E的共同点,所以从11减去两个E和两个A,我们得到7。7除以11等于63% 我的问题是,找到共同字母的最佳方法是什么? 我对swift相当陌生,但我以前曾与objective C合作过。这是我的密码: // // ViewController.swif
- 第一人:查尔斯
- 第二个人:简
- 查尔斯+简=总共11封信
- 查尔斯和简有一个A和一个E的共同点,所以从11减去两个E和两个A,我们得到7。7除以11等于63%
//
// 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)"
}
}
这个问题是重复的,它们是有用的,但是它们都使用了基础方法。 下面是使用
Set
查找纯Swift 2.0中两个单词的常用字母的简单方法:
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
(但已经有这样的示例了)。func兼容性(a:String,b:String)->Int{
let(aC,bC)=(a.小写字符,b.小写字符)
让matches={(col:String.CharacterView,set:set)在
集合中的列reduce(0){(sum,c)包含(c)?sum+1:sum}
}
让tot=aC.count+bC.count
设com=matches(aC,Set(bC))+matches(bC,Set(aC))
退货(tot-com)*100/tot
}
相容性(“查尔斯”,“简”)//63
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