I have an app (Cocoa Touch, Web Browser), however I need to be able to compare an NSString with thousands of other strings. Here’s the deal.
When a WebView loads, I get the URL. I need to compare this URL with literally thousands of results (27,847). Each of those numbers represents a line of text in a plain text file.
I would like to know the best way to go about getting the data from the text file, and comparing it with the NSString. I need to know if the URL that the WebView is loading contains any of these strings.
The app needs to be very fast, so I can’t just parse through every line in the text file, turn it into an array, and then compare each and every result.
Please share your ideas. Thanks.
I think the cleanest solution is to:
Other options are:
Use a local SQLite database. SQL databases should perform lookups relatively fast.
If you don’t want to use any database, have you tried putting all the search strings into an NSDictionary or NSMutableDictionary object? This way, you would just check if the valueForKey: for the string you’re searching for is nil.
Sample code for this:
Note: if you want the NSDictionary to perform case-insensitive comparisons, pre-load all values lowercase, and make the search string lowercase when using valueForKey:.
How much memory this could take is a whole other story, but I don’t see how this comparison could be made much faster locally. I strongly recommend the remove web service approach, though.