我有一个排序的字符串数组。有没有在这个数组中查找和元素的快速方法?
我想优化一下下面的函数。花的时间太长了。传递的数组不长(大约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)
}发布于 2016-05-27 16:15:16
我认为你可以用'indexOf‘代替’filter‘来解决这个问题:
func startsWithACalendarName(text: String, calendars: [EKCalendar], stripKeywords: Bool = false) -> (newReminderText: String, foundCalendar: EKCalendar?) {
let words = text.characters.split{$0 == " "}.map(String.init)
var found: EKCalendar?
if let index = calendars.indexOf ({ $0.title.lowercaseString == words.head?.lowercaseString }) {
found = calendars[index]
}
return (stripKeywords ? (words.tail?.joinWithSeparator(" "))! : text, found)
}https://stackoverflow.com/questions/37477782
复制相似问题