【发布时间】:2016-09-25 10:58:16
【问题描述】:
我有一个排序的字符串数组。有没有一种快速的方法来查找这个数组中的元素?
我想优化以下功能。时间太长了传递的数组并不长(只有大约 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)
}
【问题讨论】:
-
题名与题体有什么关系?
-
抱歉,已更正。
-
如果它已经排序,你可以使用二分搜索。
-
@EvanTrimboli 是否有类似于内置排序功能的优化二分搜索(即,对非常小的数组使用不同的方法,然后是中型或更大的数组)?
-
您是否每次都使用同一组日历调用此方法?如果是这样,您可以构建一个地图,以便查找时间为 O(1)。
标签: arrays swift search optimization