swift中Dictionary的grouping by使用

swift中Dictionary的grouping by使用今天在写一个功能的时候用到了Dictionary的groupingby这个用法,代码先贴出来importUIKitclassAlignFlowLayout:UICollectionViewFlowLayout{requiredinit(itemSize:CGSize=CGSize.zero,minimumInteritemSpacing:CGFloat=0,minimumLineSpacing:CGFloat=0,sectionInset:

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

今天在写一个功能的时候用到了Dictionary 的 grouping by 这个用法,代码先贴出来

import UIKit

class AlignFlowLayout: UICollectionViewFlowLayout { 
   
    
    required init(itemSize: CGSize = CGSize.zero, minimumInteritemSpacing: CGFloat = 0, minimumLineSpacing: CGFloat = 0, sectionInset: UIEdgeInsets = .zero) { 
   
        super.init()

        self.itemSize = itemSize
        self.minimumInteritemSpacing = minimumInteritemSpacing
        self.minimumLineSpacing = minimumLineSpacing
        self.sectionInset = sectionInset
        
    }

    required init?(coder aDecoder: NSCoder) { 
   
        fatalError("init(coder:) has not been implemented")
    }

    override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? { 
   
        let layoutAttributes = super.layoutAttributesForElements(in: rect)!.map { 
    $0.copy() as! UICollectionViewLayoutAttributes }
        guard scrollDirection == .vertical else { 
    return layoutAttributes }

        // Filter attributes to compute only cell attributes
        let cellAttributes = layoutAttributes.filter({ 
    $0.representedElementCategory == .cell })

        // Group cell attributes by row (cells with same vertical center) and loop on those groups
        for (_, attributes) in Dictionary(grouping: cellAttributes, by: { 
    ($0.center.y / 10).rounded(.up) * 10 }) { 
   
            // Set the initial left inset
            var leftInset = sectionInset.left

            // Loop on cells to adjust each cell's Origin and prepare leftInset for the next cell
            for attribute in attributes { 
   
                attribute.frame.origin.x = leftInset
                leftInset = attribute.frame.maxX + minimumInteritemSpacing
            }
        }

        return layoutAttributes
    }
}

可以看出来这这个代码是做了一个UICollectionViewFlowLayout的自定义,是为了做UICollectionView的Items的居左显示排列,但这不是我们要研究的重点,我们需要研究Dictionary grouping by 的用法。

其实通过grouping by 这个叫法来说应该大概说明了它的含义,它应该是按照某种条件分组使用的,那下面我们来举个例子。

例如我们有一个现有数组

enum Sex{ 
   
    male,
    female
}

class Student { 
   
	var name:String?
	var sex:Sex = Sex.male
	var age:Int = 0
}

可以看出来我们以上定义了一个枚举和一个类,类中用到了这个枚举来代表性别。比如说我们有如下一组数据。

val student1 = Student()
student1.name = "小明"
student1.sex = Sex.male
student1.age = 18

val student2 = Student()
student2.name = "小红"
student2.sex = Sex.female
student2.age = 20

val student3 = Student()
student3.name = "小童"
student3.sex = Sex.male
student3.age = 18

val students = [student1,student2,student3]

那么如果我们想用性别来把数组进行分组应该怎么写呢,我们下面来研究一下

let groups = Dictionary(grouping:students, by: { 
   
	$0.sex
})

//对就这样用Dictionnary的grouping by 操作一下就好了,那么得到数据应该是如下这样

let groups = [Sex.male:[student1,student3], Sex.female:[student2]]
当然真是数据肯定是每个组里边的数据是实体数据,我这在这里只是表象一下,这样大家应该很好理解。

好的,写到这里应该算是明白了,我们可以动手自己写着体验一下,还可以用这种方式试着写一下按照相同年龄分组一下或者按照不同年龄段分组一下。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/171336.html原文链接:https://javaforall.net

(0)
上一篇 2022年8月20日 上午11:16
下一篇 2022年8月20日 上午11:16


相关推荐

  • 腾讯元宝宣布文生图功能升级 混元和DeepSeek都可生图

    腾讯元宝宣布文生图功能升级 混元和DeepSeek都可生图

    2026年3月12日
    3
  • 卷积神经网络和图像识别[通俗易懂]

    卷积神经网络和图像识别[通俗易懂]卷积神经网络与图像识别我们介绍了人工神经网络,以及它的训练和使用。我们用它来识别了手写数字,然而,这种结构的网络对于图像识别任务来说并不是很合适。本文将要介绍一种更适合图像、语音识别任务的神经网络结构——卷积神经网络(ConvolutionalNeuralNetwork,CNN)。说卷积神经网络是最重要的一种神经网络也不为过,它在最近几年大放异彩,几乎所有图像、语音识别领域的…

    2022年6月2日
    48
  • 阿里云API接口调用[通俗易懂]

    阿里云API接口调用[通俗易懂]阿里云针对自己的平台提供了非常丰富的API接口,而且他们有提供openapi可视化服务,非常方便。阿里云openapi地址:https://api.aliyun.com/这里我在查询全部RDS资产

    2022年7月3日
    87
  • vs 下如何调试js

    vs 下如何调试jsvs 能调试 js 这个方法直到今天我知道 现在分享给和我一样初学 vs 或 asp net 开发的朋友们 对于 vs 之前的版本我没试过 我试了 vs2008 版及之后的都是可以的 估计之前的 vs2005 之类的对于调试 js 并不是很完善 首先我们要设置断点 然后我们运行 我这里举一个 web 网站的例子 接下来我们运行 如果不对 vs 进行设置 我们设置了断点 vs 下也不会给予调试 js 的机会 那不是 js 在 vs 设置断

    2026年3月18日
    2
  • numpy求特征向量_python计算矩阵

    numpy求特征向量_python计算矩阵文章目录numpy计算矩阵特征值,特征向量一、示例:二、numpy实现:numpy计算矩阵特征值,特征向量一、示例:首先借参考百度demo的来看一下矩阵的特征值和特征向量的解题过程及结果。可知矩阵A:特征值为1对应的特征向量为[-1,-2,1]T。特征值为2对应的特征向量为[0,0,1]T我们可以进一步对特征向量进行单位化,单位化之后的结果如下:特征值为1对应的特征向量为[…

    2025年8月8日
    5
  • 微型计算机的性能主要取决于多选,广东计算机一级考试试题

    微型计算机的性能主要取决于多选,广东计算机一级考试试题广东计算机一级考试试题53、在word的哪种视图方式下,可以显示分页效果()A、普通B、大纲C、页面*D、主控文档54、在word的编辑状态,连续进行了两次”插入”操作,当单击一次”撤消”按钮后()A、将两次插入的内容全部取消B、将第一次插入的内容全部取消C、将第二次插入的内容全部取消*D、两次插入的内容都不被取消55、在WINDOW95中,若在某一文档中连续进行了多次剪切操作,当关…

    2022年6月28日
    27

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号