ソートされた文字列があります。この配列には素早く見つかる要素がありますか?ソートされた配列内で素早く要素を見つける
以下の機能を最適化したいと思います。それは時間がかかりすぎている。渡された配列は長くない(約15-20要素)が、それはたくさんの(約1000回)と呼ばれています。現在、私はちょうど実行します.filter { }
しかし、これは完全な配列1000回を通過するので、これはボトルネックかもしれないと思いますそのような最初のカレンダーを見つけるときに勃発するのとは対照的である。
組み込みの並べ替え機能に似た、最適化された(つまり、非常に小さな配列と中規模またはそれ以上の異なるアプローチを使用する)組み込み検索がありますか?
基本的には、組み込みの並べ替え/並べ替え機能の対応を探しています。配列を頻繁に並べ替えて特定の要素を見つけ出すので、このようなことをするのは非常に意味があります。
func startsWithACalendarName(text: String, calendars: [EKCalendar], stripKeywords: Bool = false) -> (newReminderText: String, foundCalendar: EKCalendar?) {
// make array of words from text
let words = text.characters.split{$0 == " "}.map(String.init)
// BOTTLENECK? Check if I have a calendar that is equal to first word of text
let found = calendars.filter { $0.title.lowercaseString == words.head?.lowercaseString }
return (stripKeywords ? (words.tail?.joinWithSeparator(" "))! : text, found.first)
}
質問本体に関連した質問のタイトルでどのように? –
申し訳ありませんが、訂正しました。 – Daniel
すでにソートされている場合は、バイナリ検索を使用できます。 –