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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java移动端开发_移动端开发

    java移动端开发_移动端开发1.移动端视口问题视口是指浏览器的可视区域,移动端的视口到底是多宽呢?现在市面上的大部分手机,比如iphoneX,它的默认视口宽度为980px,而一个iphoneX的屏幕宽度仅仅为375px。看到问题了吗?一个宽度只有375像素的手机,却能够显示宽度为980像素的网页,自然而然,网页会被缩小。(注:实际上,这里说的375像素不是真实的物理像素,至于这个375像素是怎么来的,以及为什么大部分移动…

    2022年6月24日
    31
  • mac 版本 idea 2021.4激活码免费【在线破解激活】[通俗易懂]

    mac 版本 idea 2021.4激活码免费【在线破解激活】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月16日
    76
  • s一般怎么称呼自己的m_怎么判断自己的肾脏是否健康?肾好的人,一般会有这8大特征…

    s一般怎么称呼自己的m_怎么判断自己的肾脏是否健康?肾好的人,一般会有这8大特征…肾脏是身体的“净化器”,经过肾脏代谢排毒之后,废物顺着尿液排出体外,使内环境得到净化。可见,拥有一颗健康的肾脏是非常重要的,而我们日常生活中也要注意对肾脏健康的自我检查。那么,我该如何粗略自我判断自己肾脏是否健康呢?接下来就让我们一起来了解一下肾脏健康情况下,身体会有哪些表现。肾脏健康有哪些表现?1、小便没有泡沫:日常生活中小便时在尿液中没有出现泡沫且颜色清澈正常,那么往往说明肾脏也是比较健康的。…

    2022年6月23日
    28
  • CentOS7 安装 kafka「建议收藏」

    CentOS7 安装 kafka「建议收藏」文章目录一、安装JDK二、安装zookeeper三、安装kafka一、安装JDKrpm-qa|grepjavarpm-qa|grepjdkrpm-qa|grepgcjrpm-qa|grepjava|xargsrpm-e–nodeps #卸载老版本yumlistjava-1.8*yuminstalljava-1.8.0-openjdk*-yjava-version二、安装zookeeper官方地址:https://ar

    2022年6月6日
    27
  • 身为三本的我就是凭借这些前端面试题拿到百度京东offer的,前端面试题2021及答案「建议收藏」

    点进来之后你的噩梦就要来了,接下来你要面对上百道面试题,那么,如果你——是个小白菜:推荐使用2~3周的时间来消化接下来的面试题,遇到不会的专业名词请立刻去搜;文章中只是简答,如果想要详细了解的话还需要你自觉去搜索如果你是个大神:好叭先给您拜个早年,大哥大嫂过年好。请温柔点黑我。顺便,如果有错误的地方请各位一定要指出,免得误导更多人。接下来的题我会根据重点程度使用⭐来标记,⭐越多标明越重点,满星是5颗星ok,你准备好了吗?咱们开始吧!JS数据类型面试官:JavaSc

    2022年4月7日
    34
  • Excel均方误差计算公式_随机误差项的方差估计量推导

    Excel均方误差计算公式_随机误差项的方差估计量推导在Excel表中,有时需要计算方差,然后根据此图绘制图表,目标值指示偏差程度,然后如何计算方差?方差的概念方差是每个数据与平均值之间差异的平方和的平均值.在概率论和数理统计中,方差(英语方差)用于衡量随机变量与其数学期望值(即均值)之间的偏差程度.均方误差的概念也称为标准偏差,它是每个数据与平均值的距离的平均值.它是平方的平方根和与平均值的偏差的平均值.标准偏差可以反映数据集的分散程度.如…

    2022年9月30日
    2

发表回复

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

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