好的,所以我在SQLite数据库中搜索名为Artists的行中的所有条目...但我不希望同一个艺术家出现两次......
-(NSArray *)findAllArtists
{
NSMutableArray *returnArray = [[[NSMutableArray alloc] init] autorelease];
NSString *query = @"SELECT * FROM Painting";
sqlite3_stmt *statement;
if (sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, nil)
== SQLITE_OK)
{
while (sqlite3_step(statement) == SQLITE_ROW)
{
char *uniqueIdChars = (char *) sqlite3_column_text(statement, 0);
char *artistChars = (char *) sqlite3_column_text(statement, 1);
NSString *uniqueId = [[NSString alloc] initWithUTF8String:uniqueIdChars];
NSString *artist = [[NSString alloc] initWithUTF8String:artistChars];
PaintingInfo *info = [[PaintingInfo alloc] initWithUniqueId:uniqueId artist:artist];
[returnArray addObject:info];
[uniqueId release];
[artist release];
}
sqlite3_finalize(statement);
}
sqlite3_close(database);
return returnArray;
}
所以,我在想的是一种方法可能是在将结果添加到returnArray之前使用循环内部,在那里我检查它是否与之前的结果匹配......听起来相当简单,但由于某种原因,我没有得到我试图工作的循环(想想我可能已经工作太久没有睡觉,所以我盲目地主演我的错误)... 再说一遍,我对SQLite相当新,所以它可能是一种糟糕的方式......
有什么建议吗?
答案 0 :(得分:2)
为什么不让sql引擎做这项工作?选择不同的
http://www.sqlite.org/lang_select.html
示例:
SELECT DISTINCT artist FROM Painting
如果出于某种原因需要在循环中的代码中进行处理,可以查看作为哈希集的NSSet。您可以在处理时将每个艺术家添加到集合中,并在处理之前检查集合中是否存在。
例如,这个:
NSArray *artists = [NSArray arrayWithObjects:@"bob", @"jane", @"jane", nil];
NSMutableSet *distinctArtists = [[NSMutableSet alloc] init];
NSMutableArray *list = [[NSMutableArray alloc] init];
for (NSString* artist in artists)
{
if (![distinctArtists containsObject:artist])
{
[distinctArtists addObject:artist];
[list addObject:artist];
}
}
// print
for (NSString *artist in list)
{
NSLog(@"artist: %@", artist);
}
输出:
2011-10-06 22:51:16.457 Craplet[1982:707] artist: bob
2011-10-06 22:51:16.459 Craplet[1982:707] artist: jane
答案 1 :(得分:0)
SELECT * FROM绘画GROUP BY Artist具有相同的效果