Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将自定义对象数组动态排序到分区UITableview中_Uitableview_Swift - Fatal编程技术网

将自定义对象数组动态排序到分区UITableview中

将自定义对象数组动态排序到分区UITableview中,uitableview,swift,Uitableview,Swift,我有一个困扰我几天的问题 我有一个数组叫做countries。此数组包含一个自定义对象,该对象保存国家、城市、ip、状态等数据 我需要在由属性“country”剖切的tableview中显示这些对象 这意味着,如果我有两个自定义对象都带有国家“Australia”,我需要将其添加到名为“Australia”的节中,如果我有5个对象带有国家“Spain”,我需要将这5个对象添加到西班牙节中 我需要找到一种方法来确保即使一个对象添加了另一个国家,它也会被放在一个带有国家名称的部分下 我尝试了很多方法

我有一个困扰我几天的问题

我有一个数组叫做countries。此数组包含一个自定义对象,该对象保存国家、城市、ip、状态等数据

我需要在由属性“country”剖切的tableview中显示这些对象

这意味着,如果我有两个自定义对象都带有国家“Australia”,我需要将其添加到名为“Australia”的节中,如果我有5个对象带有国家“Spain”,我需要将这5个对象添加到西班牙节中

我需要找到一种方法来确保即使一个对象添加了另一个国家,它也会被放在一个带有国家名称的部分下

我尝试了很多方法,但都没有办法解决这个问题。 之所以是动态的,是因为我不知道每个部分将包含多少对象。这意味着每个部分中的对象数量可以更改

我使用这段代码按字母顺序对数组进行排序,我只需要根据属性“Country”将每个对象放入一个分区中,我不知道每个分区中将有多少个分区,或者每个分区中将有多少个对象

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