実現したいこと
Swiftでのあいまい検索(部分一致)
発生している問題・エラーメッセージ
現在Swiftでのあいまい検索(部分一致)の機能を実装したいと思っているのですが
他の言語にあるような Like "*" & target & "*" のようなことってできますか?
下のようなコードで色々試してみたのですが入る値が空欄の場合は全件取得したいです。
SwiftでFilterの部分一致の機能を実装するにはどのように書いたら良いでしょうか?
該当のソースコード
Swift
1import UIKit 2 3class ViewController: UIViewController { 4 5 var csvArray: Array<Array<String>> = [] 6 var dataArray: Array<Array<String>> = [ 7 ["1","東京","男性","38","2"] 8 ,["2","東京","男性","31","2"] 9 ,["1","東京","女性","23","2"] 10 ,["3","東京","男性","20","2"] 11 ] 12 override func viewDidLoad() { 13 super.viewDidLoad() 14 15 //★★★★★の部分をLike "*" & target & "*"のような条件式にしたい 16 csvArray = dataArray.filter{$0[0] == "1"} //★★★★★ 17 print(csvArray) 18 19 } 20 21 22} 23
試したこと
・Swift Like文 あいまい検索等のキーワードで調べるも分かりませんでした。
・Like "*" & target & "*" Likeが使えずエラー
・== "*" & target & "*" ワイルドカードが機能していないので0件
・!= "" は全件取得はできたのですが、あいまい検索ではないので却下
※ワイルドカードの半角がここでは表示できなかったので全角にしてあります。
こちらについて詳しい方いらっしゃいましたら、ご教授願います。
よろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
filter の後ろの {} 内には Swift の式が自由に書けますので、contains とか使えば良いのでは。
https://qiita.com/usausako/items/c5d7d78efeb5873c324d
hoshi様早速ありがとうございます。
csvArray = dataArray.filter{$0[0].contains("1")}
でも検索できるようになったのですが、
csvArray = dataArray.filter{$0[0].contains("")} や
csvArray = dataArray.filter{$0[0].contains("**")}
では全件取得できないです。
他の言語のワイルドカードのようなものの使い方ってできるのでしょうか?
Swift では contains("") は false になるようですね。(いま知った…。)
ってことは dataArray.filter { target.isEmpty || $0[0].contains(target) } かなぁ。
できました!!!
SwiftのLike文めちゃくちゃ難しいですね(笑)
filterの条件もこんな書き方ができることも勉強になりました。
いつもいつも本当にありがとうございます。
回答2件
あなたの回答
tips
プレビュー