我正在开发一个 iPhone 应用程序,它从我编写的 php Web 服务接收信息,然后在 UITextView
中显示该信息。
我正在检索的是列表中的条目。每个条目可以有多个子条目,但表中每个主条目只有 1 或 2 个“相关条目”。
我面临两个相关问题,我正在寻找一些关于如何克服这些问题的建议或最佳实践。
首先,根据大量阅读的帖子,我设计了数据库并尽我所能对其进行规范化。然而,缺点是,当我执行包含大量联接的查询时,我会得到一个包含大量冗余数据的表。当我解析信息时,这给我在客户端带来了问题。当我解析数据并显示它时,我的 UITextView
中最终出现了很多重复的条目。
其次,我认为解决方法可能是创建单独的查询(我知道这是一个很大的禁忌),并且只检索信息一次。这在理论上解决了我的问题,但又产生了一个新问题。由于我的应用程序异步检索信息,因此我单独进行的数据库调用由于明显的原因不会显示。此外,这感觉像是一种 hack,而不是解决我原来问题的优雅方法。
非常感谢任何指导。
最佳答案
方法 1:
假设您有 NSArray
包含 (1,2,3,4,5,5,5,5,3,3,3) 正如您所说,您正在以列表形式检索条目,并且您必须删除冗余,或者您只需选择不同的列表项,然后您可以简单地执行以下操作:
可以将NSArray
转换为set来实现唯一数组
NSSet *set = [NSSet setWithArray:array];
NSArray *a = [set allObjects]; here a contains (1,2,3,4,5)
方法 2:
如果您有具有属性的对象列表,例如:
Person(name,age,gender) name , age , gender are properties .
并且您想要仅具有不同名称的对象,那么您可以执行以下操作:
NSArray *mainList; //this is your all entries list.
NSArray *uniqueNames = [mainList valueForKeyPath:@"@distinctUnionOfObjects.name"];
uniqueNames 是具有唯一名称的人员列表。如果您想根据年龄进行选择,那么您可以简单地用年龄替换名称,如下所示:
NSArray *mainList; //this is your all entries list.
NSArray *uniqueAges = [mainList valueForKeyPath:@"@distinctUnionOfObjects.age"];
希望这有帮助。
关于php - 使用冗余数据解析来自 Web 服务的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23227533/