首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在排序数组中快速查找元素

在排序数组中快速查找元素
EN

Stack Overflow用户
提问于 2016-05-27 15:48:52
回答 1查看 74关注 0票数 0

我有一个排序的字符串数组。有没有在这个数组中查找和元素的快速方法?

我想优化一下下面的函数。花的时间太长了。传递的数组不长(大约15-20个元素),但它被大量调用(大约1000次)。目前我只做了一个.filter { },但我认为这可能是一个瓶颈,因为它会遍历整个数组1000次,而不是在找到第一个这样的日历时突破。

是否有类似于内置排序函数的优化的内置搜索(即,对非常小的数组使用不同的方法,然后使用中等或更大的数组)?

基本上,我正在寻找内置排序/排序函数的对应函数。拥有这样的东西很有意义,因为您经常对数组进行排序,然后在其中找到特定的元素。

代码语言:javascript
复制
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)
}
EN

回答 1

Stack Overflow用户

发布于 2016-05-27 16:15:16

我认为你可以用'indexOf‘代替’filter‘来解决这个问题:

代码语言:javascript
复制
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) 
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37477782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档