扫描NSMutableArray作为字符串的一部分

时间:2013-02-01 09:32:38

标签: iphone ios objective-c nsmutablearray

我是iphone编程的新手,我很喜欢我当前的项目。我有一个包含大量数据的文本文件。数据的排序如下:

51398030 10003254 80211593/94     1301281744 TOMTOM100  
51398030 10003254 80211593/94     1301281744 TOMTOM101  
51398030 10003254 80211593/94     1301281745 TOMTOM102  
51398030 10003254 80211593/94     1301281745 TOMTOM103  
51398033 10003254 80211595        1301281744 TOMTOM100  
51398033 10003254 80211595        1301281744 TOMTOM101  
51398033 10003254 80211595        1301281745 TOMTOM102  
51398033 10003254 80211595        1301281745 TOMTOM103  
51398029 10003254 80211597/98     1301281744 TOMTOM100  
51398029 10003254 80211597/98     1301281744 TOMTOM101  
51398029 10003254 80211597/98     1301281745 TOMTOM102  
51398029 10003254 80211597/98     1301281745 TOMTOM103

我已导入此txt文件并创建了一个NSMutableArray,其中包含每一行作为对象。现在我有一个文本字段,用户可以在其中输入数字。应用程序现在应该通过文本文件查看,并整理包含此数字的行。

我已经查看了https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/Strings/Articles/Scanners.html#//apple_ref/doc/uid/20000147-BCIEFGHC

但我不知道如何开始。

这是我有多远:

    NSData *tmpData = [NSData dataWithContentsOfURL:[NSURL       URLWithString:trackTraceFileUrlName] ];
    NSLog(@"%@",trackTraceFileUrlName);
    //convert data to string 
    NSString *tmpString = [[NSString alloc] initWithData:tmpData              encoding:NSUTF8StringEncoding];
    NSArray *piecesArray = [tmpString componentsSeparatedByString:@"\n"];
    NSMutableArray *trackTraceContent = [NSMutableArray arrayWithArray:piecesArray];
    NSLog(@"*%@*",trackTraceContent);

3 个答案:

答案 0 :(得分:1)

尝试以下代码

NSString *str = <string on which you want to search>;

    NSRange r;
    if ((r = [str rangeOfString:@"the string you want to search"]).location != NSNotFound)
        //string found..

我认为你有一个数组,所以尝试修改一个

for (NSString *str in <array>)
{
    NSRange r;
    if ((r = [str rangeOfString:@"the string you want to search"]).location != NSNotFound)
        //string found..
}

答案 1 :(得分:1)

因为您可能想要搜索数组中的所有行,并假设您的数组只包含字符串作为NSString对象:

NSArray *stringArray; // assuming that you already have these variables
NSString *numberEnteredByUser;
NSPredicate *pred = [NSPredicate predicateWithBlock:^(id obj, NSDictionary *bindings) {
    NSString *str = (NSString *)obj;
    return [str rangeOfString:numberEnteredByUser].location != NSNotFound;
}];
NSArray *results = [stringArray filteredArrayUsingPredicate:pred];

当然,您也可以在不使用NSPredicate的情况下创建目标数组,只需迭代stringArray并将正确的对象添加到NSMutableArray results

答案 2 :(得分:0)

如果用户输入的数字是对数据的主要搜索,且它是唯一的,则使用数字作为关键:

NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];
MyObject obj = ...;
[dictionary setObject:obj forKey:obj.number];
// etc.

查找将更多更快,因为这正是字典(哈希表)的用途。

注意:Objective-C集合类只能保存对象,因此您需要使用NSNumber对象来表示数字,而不是基本类型。

如果数字不是唯一,那么您仍然可以使用此技术,但您需要使用数字<来保存数组字典/ em>作为该数组的关键,这使事情变得复杂。但是,这样做仍然可以获得性能优势。