将自定义对象数组动态排序到分区UITableview中
我有一个困扰我几天的问题 我有一个数组叫做countries。此数组包含一个自定义对象,该对象保存国家、城市、ip、状态等数据 我需要在由属性“country”剖切的tableview中显示这些对象 这意味着,如果我有两个自定义对象都带有国家“Australia”,我需要将其添加到名为“Australia”的节中,如果我有5个对象带有国家“Spain”,我需要将这5个对象添加到西班牙节中 我需要找到一种方法来确保即使一个对象添加了另一个国家,它也会被放在一个带有国家名称的部分下 我尝试了很多方法,但都没有办法解决这个问题。 之所以是动态的,是因为我不知道每个部分将包含多少对象。这意味着每个部分中的对象数量可以更改 我使用这段代码按字母顺序对数组进行排序,我只需要根据属性“Country”将每个对象放入一个分区中,我不知道每个分区中将有多少个分区,或者每个分区中将有多少个对象将自定义对象数组动态排序到分区UITableview中,uitableview,swift,Uitableview,Swift,我有一个困扰我几天的问题 我有一个数组叫做countries。此数组包含一个自定义对象,该对象保存国家、城市、ip、状态等数据 我需要在由属性“country”剖切的tableview中显示这些对象 这意味着,如果我有两个自定义对象都带有国家“Australia”,我需要将其添加到名为“Australia”的节中,如果我有5个对象带有国家“Spain”,我需要将这5个对象添加到西班牙节中 我需要找到一种方法来确保即使一个对象添加了另一个国家,它也会被放在一个带有国家名称的部分下 我尝试了很多方法
self.countries = self.countries.sorted { $0.country < $1.country }
您是否尝试使用NSPredicate帮助您按国家/地区名称筛选阵列?我认为您可以在运行时或在加载开始时将服务器拆分为一组阵列,具体取决于列表是否更新 在
numberofrowsinssection:
中,只需在索引部分计算子数组的行数
类似地,在cellforrowatinexpath:
中,使用排序数组从自定义类获取信息
我不得不处理一些类似于分类联系人的事情。希望这有帮助 所以您需要将服务器分类到字典中。例如
[String:[Server]]
作为节名(国家)的字符串。例如dict[“阿尔巴尼亚”:[serv1,server2,…]
您可以通过对服务器阵列进行排序来实现这一点(我假设您可以解决这个问题)
您还需要保存一个节标题数组,以便可以在cellforrowatinexpath
中访问它。例如[“阿尔巴尼亚”、“巴西”、“古巴”、“德国”、“俄罗斯”]
因此,基本上,当您在cellforrowatinexpath
中使用
var country = yourSectionArray[indexPath.section]
然后通过字典访问对该国家/地区有效的服务器阵列,如下所示:
var serversOfCurrentSection = yourDictionary[country] as [Server]
然后,要获取索引的当前服务器,只需执行以下操作
var server = serversOfCurrentSection[indexPath.row]
要获取每个部分中的对象数,请执行以下操作:
var country = yourSectionArray[indexPath.section]
yourDictionary[country].count
有很多方法可以做到这一点 表视图需要稳定的数据才能工作。如果更改数据模型,则需要通知表视图重新加载 我可能会以两种方式存储记录:在一个平面数组中,然后在一个按国家排列的数组中,该数组中的每个条目都是该国家的记录数组。像数组这样的集合对象通过引用保存它们内部的对象,因此在多个数组中存储相同的记录不会有很多开销 这使得创建剖切表视图非常干净 您可以按国家对平面记录数组进行排序,然后遍历已排序的数组,按国家构建记录数组。如果您需要按照某个国家/地区内的某些其他标准对记录进行排序,您可能希望使用NSPredicate进行排序,而不是进行排序,因为它可以采用一系列排序键
如果用户可以在任何位置输入新记录,则可以收集该新记录的数据,然后在排序数组中找到该记录所属的位置,将其插入该位置,然后从排序的平面数组重建二维数组。这将避免对整个数组重新排序,这对于大型数据数组来说可能会很慢。)您的
cellforrowatinexpath
方法是什么样子的?此外,您还可以使用sorted按字母顺序对数组进行排序。它需要按对象中的county属性进行排序。不是按字母顺序。我现在将使用cellForRowAtIndexPath编辑。我假设您的分区将按字母顺序排序?是的,我现在已按字母顺序排序数组。唯一的问题是我不知道每个部分中有多少个对象。这就是为什么它需要是动态的。有史以来最清晰的解释!谢谢你说服务器是什么意思?
var country = yourSectionArray[indexPath.section]
yourDictionary[country].count