2017-04-17 1 views
1

こんにちは。あなたのお手伝いが必要な少しの質問があります。私は3つの異なる配列値をどのように比較して最も近い類似の値だけを返すのですか?このような何かがここにBTM:Swiftは3つの異なる配列を正しい値で比較します。検索インデックスと同じです。

var str1 = ["hi","yoyo","damn"] 
var str2 = ["yoyo","wow","daui"] 
var str3 = ["damn","right","yoyo"] 

私はのように、これらの3つのインデックスの例を検索すると、「こんにちは」と「ヨーヨー」それはregardlesslyそのSTR2とSTR3が持つ「ヨーヨー」の類似した値を持つ、最初str1は結果を返します。 str1。

+0

は、あなただけのこれらの3つの配列が共有する価値をしたいですか? – Sweeper

+0

いいえ配列の最も近い最も近い値を返したいと思いません。たとえば、 "hi"と "yoyo"を検索するとstr1とstr3の値が返されます。forループメソッドを使用すると、配列の共有の、私はそれを望んでいない。私はあなたが私が意味するものを得ることを願って.... – user3711175

+0

検索するものが配列に入れられる解決策が欲しいですか?あなたの例の '[" hi "、" yoyo "]'のように。言い換えれば、署名 'search(for:Set 、[Set ]) - > Set 'の関数が必要ですか? – Sweeper

答えて

1

検索領域セットと検索対象のセットの交点にあるアイテムの最大値を取得することで、これを行うことができます。

func search(`for` searchItems: Set<String>, `in` searchArea: [Set<String>]) -> Set<String>? { 
    return searchArea.max(by: { (a, b) -> Bool in 
     return searchItems.intersection(a).count < searchItems.intersection(b).count 
    }) 
} 

使用法:

var str1: Set<String> = ["hi","yoyo","damn"] 
var str2: Set<String> = ["yoyo","wow","daui"] 
var str3: Set<String> = ["damn","right","yoyo"] 

let area = [str1, str2, str3] 

search(for: ["yoyo", "hi"], in: area) 
+0

ありがとう@スウィパー検索結果をプリントアウトするにはどうすればいいですか?成功した結果だけを印刷する(str1)ように? – user3711175

+0

@ user3711175あなたは単に 'print(検索:(" yoyo "、" hi ")、in:area))'を実行できませんか? – Sweeper

+0

sry sry yaあなたは正しいです – user3711175

関連する問題