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]]
当然真是数据肯定是每个组里边的数据是实体数据,我这在这里只是表象一下,这样大家应该很好理解。

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • SaaS管理软件_软件saas

    SaaS管理软件_软件saas山寨SaaS今天又有一个人问我SaaS了,而且显然看了不少资料,也总结与思索了许多。但他与我交流后,我觉得有些话我也要总结总结,我对SaaS的一些观点和想法也清晰了不少,所以记了下来。大家都把SaaS定位在中小企业的身上。这个观点我也认同。因为我遇到的客户恰恰层次比较清晰:1进货卖货当渠道的经销商。本身自己不生产不设计,只是他从厂家进货,然后自己卖了,中间打个价差而已。他们主要的业务就…

  • lua sort排序_python中列表排序的用法

    lua sort排序_python中列表排序的用法”’lua中对table的排序一般是用lua自带的table.sort()函数排序,一般不采用自己写的排序的方式,以下来说一说table.sort()排序和在工作中遇到的问题1.排序的方式table.sort(tbl,function(a,b)returna>bend)以上是一个简单的例子,得到的效果是对于待排序的数据的一个升序,你这样认为就是错了,例如a

  • android cs bs 架构,BS架构与CS架构的区别

    android cs bs 架构,BS架构与CS架构的区别C/S结构,即Client/Server(客户机/服务器)结构,是大家熟知的软件系统体系结构,通过将任务合理分配到Client端和Server端,降低了系统的通讯开销,可以充分利用两端硬件环境的优势。早期的软件系统多以此作为首选设计标准。B/S结构,即Browser/Server(浏览器/服务器)结构,是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户界面完…

  • 大数据开发:分布式文件存储系统简介

    大数据开发:分布式文件存储系统简介在分布式存储技术体系当中,分布式文件存储是其中的分类之一,也是大数据架构当中常常用到的。得益于Hadoop的高人气,Hadoop原生的HDFS分布式文件系统,也广泛为人所知。但是分布式文件存储系统,并非只有HDFS。今天的大数据开发分享,我们就主要来讲讲常见的分布式文件存储系统。分布式文件系统,可以说是分布式系统下的一个子集,这里我们选取市场应用比较广泛的几款产品,HDFS、Ceph、FastDFS以及MooseFS来做简单的分析——HDFS如上所说,HDFS是分布式文件系统当中人气非常

  • 存储和计算技术的选择

    存储和计算技术的选择

  • 手撸 webpack4.x 配置(二)[通俗易懂]

    手撸 webpack4.x 配置(二)[通俗易懂]接着上一篇手撸webpack4.x配置(一)继续学习webpack配置。今天我学习配置下webpack中另一个模块plugins配置。之前我们都是手动在打包后(dist)目录里手动新建的index.html然后把打包后生成的JS文件手动的引入,今天我们来安装一个插件让webpack自动给我们生成模板!1官网配置地址:html-webpack-p…

发表回复

您的电子邮箱地址不会被公开。

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