0

我是 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);
4

3 回答 3

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..
}
于 2013-02-01T09:41:25.157 回答
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

于 2013-02-01T09:45:39.853 回答
0

如果用户输入的数字是对您的数据的主要搜索,并且它是唯一的,那么将您的数据保存在字典中,而不是数组中,使用数字作为键:

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

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

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

如果数字不是唯一的,那么您仍然可以使用这种技术,但是您需要保存一个数组字典,使用数字作为该数组的键,这会使事情变得有些复杂。但是,这样做您仍然可以获得性能优势。

于 2013-02-01T09:36:30.153 回答