ios 数组中的字典排序_利用数组和字典,实现按指定规则的排序

大家好,今日我们继续讲解数组与字典解决方案,今日讲解第47讲:利用字典和数组,实现按指定规则的排序。随着字典讲解的深入,我们发现字典真的很神奇,在VBA代码中,给人以十分清爽的感觉,在这套数组与字典解决方案中,我会尽可能的把经常用到的实例多多讲解给大家,让大家对于字典的理解更加深入.虽然这块内容利用其它方案都可以实现,但是字典确实能大大简化我们的代码.让我们对于VBA的理解更深入.

今日实例是实现按指定规则的排序,为什么会有这个课题呢?对于职场中的我们经常会用到数据分析,往往数据来源不一致,同样项目,由于来源不同,往往排序的方式不同,而且有时候要求提交数据的排序并不是EXCEL自带功能可以解决的,这个时候怎么办?我们依然可以用字典来帮助解决,我们看下面的数据:

ab44e7efbf837f2d51486aaa908f14a7.png

大家注意到,在A,B列中,给出了排序的规则,在D,E,F列中是提供的报表数据,但这个数据报表的排序不符合A,B列的排序规则,我们要实现的是把报表数据按照固定的规则来排序,如何做到呢?下面看我给出的代码:

Sub mynzsz_47() '第47讲 利用数组和字典,实现按指定规则的排序

Sheets("47").Select

Dim mybrr()

'建立字典

Set myDic = CreateObject("Scripting.Dictionary")

'把数据装入数组

myarr = Range("a2:f" & [a65536].End(xlUp).Row)

'动态数组的再分配

ReDim mybrr(1 To UBound(myarr), 1 To 4)

'字典的赋值,也是排序规则的建立

For i = 1 To UBound(myarr)

myDic(CStr(myarr(i, 1))) = i

Next i

'给定数据的排序,其实是把给定的数据,按照字典建立的规则放到另外一个数组中

For i = 2 To Cells(65536, 4).End(xlUp).Row

If myDic(CStr(myarr(i - 1, 4))) <> "" Then

mybrr(myDic(CStr(myarr(i - 1, 4))), 1) = myarr(i - 1, 4)

mybrr(myDic(CStr(myarr(i - 1, 4))), 2) = myarr(i - 1, 5)

mybrr(myDic(CStr(myarr(i - 1, 4))), 3) = myarr(i - 1, 6)

End If

Next i

'数据的回填

[d2].Resize(UBound(mybrr), 3) = mybrr

End Sub

代码的截图:

34b49237a2a563dd959ce1854f82c21c.png

代码讲解:

1 上述代码实现了数据按指定规则排序,只要给定规则,就可以实现数据的自定义排序。

2 '把数据装入数组

myarr = Range("a2:f" & [a65536].End(xlUp).Row)

上述代码将数据放到数组中,在实际应用中,也可以将规则数据和报表数据分别放在不同的数组中。

3 '动态数组的再分配

ReDim mybrr(1 To UBound(myarr), 1 To 4)

这个动态数组是用来装排序完成的数据的。

4 '字典的赋值,也是排序规则的建立

For i = 1 To UBound(myarr)

myDic(CStr(myarr(i, 1))) = i

Next i

大家要注意这几行代码即给字典赋值同时又用键值定义了排序的规则,大家可以理解一下。

5 '给定数据的排序,其实是把给定的数据,按照字典建立的规则放到另外一个数组中

For i = 2 To Cells(65536, 4).End(xlUp).Row

If myDic(CStr(myarr(i - 1, 4))) <> "" Then

mybrr(myDic(CStr(myarr(i - 1, 4))), 1) = myarr(i - 1, 4)

mybrr(myDic(CStr(myarr(i - 1, 4))), 2) = myarr(i - 1, 5)

mybrr(myDic(CStr(myarr(i - 1, 4))), 3) = myarr(i - 1, 6)

End If

Next i

在上述代码中,首先在字典中查找报表数据在字典中是否存在,如果存在,那么就存放到存放排序结果的数组中,但是放在结果数组中的时候,存放顺序是键值给出的顺序。

6 '数据的回填

[d2].Resize(UBound(mybrr), 3) = mybrr

将排序的结果回填到数据区域.

下面看代码的运行结果:

1646b9a9371c920410715a7d4185b96c.png

今日内容回向:

1 如何实现报表数据按指定规则的排序?

2 myDic(CStr(myarr(i, 1))) = I 的意义是什么?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/575910.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MVC3学习:利用mvc3+ajax实现登录

用到的工具或技术&#xff1a;vs2010,EF code first,JQuery ajax,mvc3。 第一步&#xff1a;准备数据库。 利用EF code first&#xff0c;先写实体类&#xff0c;然后根据实体类自动创建数据库&#xff1b;或者先创建数据库&#xff0c;再写实体类&#xff0c;都可以。如果实体…

vue获取tr内td里面所有内容_vue 项目学习

首先页面的整体内容结构以及package.json 里面的内容package.jsonrouter.js 路由功能import Vue from vue import Router from vue-router import Login from /login;Vue.use(Router) let router new Router({routes: [{path: /,redirect: {name: Login},},{path: /Login,na…

lnmp环境搭建完全手册(四)——lnmp搭建(源码安装)

首先来介绍一下Nginx.Nginx是一个高性能的 HTTP 和 反向代理 服务器&#xff0c;也是一个 IMAP/POP3/SMTP 代理服务器。Nginx不仅可以作为web服务器,也可以作为负载均衡器,之前也有文章介绍,大家可以看一下. MySQL是一款开源免费的数据软件,MySQL是一个小型关系型数据库管理系统…

ubuntu中解压rar文件遇到乱码的解决方法

如上图所示&#xff0c;在用ubuntu的时候经常会遇见rar压缩文件打开出现乱码&#xff0c;解压的时候也会出现无效的编码等错误。 解决方法是用 sudo apt-get remove rar 卸载rar 然后用 sudo apt-get instal unrar 安装unrar 然后就可以解决这个问题了。 个人理解rar是用来压缩…

锐界机器人_2019款锐界智能家居远程控制使用介绍

2019款经过场地的绕圈测试&#xff0c;传祺GA6的制动系统依旧保持良好的响应速度&#xff0c;而且制动力输出没有虚位&#xff0c;从踩上制动踏板初段就能得到明显的制动力反馈。车头重量给前脸极大的压力&#xff0c;不过在极限过弯的情况下&#xff0c;悬架依旧提供了足够的支…

zabbix监控链接

http://www.abcdocker.com/

kmeans中的k的含义_硬质合金中P、M、K、N、S、H六大字母含义详解

数控技术在线订单 | 技术 | 干货 | 社群关注可加入机械行业群&#xff01;关注P类:硬质合金中&#xff0c;P类产品的切削范围是指碳钢&#xff0c;铸钢&#xff0c;包括0.25-0.25%C淬火和调质&#xff0c;易切钢包含退火与淬火调质&#xff0c;低碳合金钢含金元素少于5%的范围&…

openerp经典收藏 对象定义详解(转载)

对象定义详解 原文地址&#xff1a;http://shine-it.net/index.php/topic,2159.0.htmlhttp://blog.sina.com.cn/s/blog_57ded94e01013xa9.html本连载准备详细解密OpenERP的对象定义&#xff0c;内容包括深入理解OpenERP的对象&#xff0c;对象详细定义、字段详细定义、对象的预…

gitlab,ldap新用户无法登陆,报错 Could not authenticate you from Ldapmain because “Undefined method `provider‘

查看/var/log/gitlab/gitlab-rails/application.log日志&#xff0c;报错如下&#xff1a; 2022-06-16T07:31:57.865Z: (LDAP) Error saving user cnwangsan,ouzmjkf,dczmjkf,dccn (123847567qq.com): ["Email is not allowed for sign-up. Please use your regular email…

gitlab集成ldap用户后,禁用原来的账户体系进行拉取代码

gitlab在集成ldao用户后&#xff0c;经过测试&#xff0c;用户可以还可以通过原来的账号体系进行项目代码的拉取&#xff0c;需要把原来的账号体系的拉取功能关闭&#xff0c;使用ldap的账号体系进行工作开展。 方法如下&#xff1a; 在管理员-设置-通用-登录限制里把 Allow…

ffmpeg 分辨率 压缩_用GPU加速FFmpeg中的超分辨率功能

1. 简要回顾首先简单复述一下FFmpeg中对深度学习的支持情况&#xff0c;如上图所示&#xff0c;FFmpeg在libavfilter中支持基于深度学习的filter&#xff0c;目前已经支持sr, derain和dnn_processing等filter&#xff0c;其中&#xff0c;dnn_processing是一个通用的filter&…

oFono学习笔记——GATChat(2):发送AT命令

摘要&#xff1a; 本文主要描述了GAtChat如何发送AT命令的全过程 1. GAtChat AT命令发送接口 在GAtChat库当中&#xff0c;根据AT命令返回结果的不同&#xff0c;GAtChat定义了四种不同的发送接口&#xff1a;一般发送接口&#xff0c;表单发送接口&#xff0c;PDU表单发送接口…

archery集成ldap无法登陆

archery配置ldap之后,浏览器提示用户名或密码错误,请重新输入,去ldap日志查看,用户已经认证成功。 archery服务报错如下: [2022-06-16 14:00:03,221][MainThread:140070598219584][task_id:django_auth_ldap][backend.py:368][WARNING]- Caught LDAPError while authenti…

mysql存储过程输入参数拆分_一文看懂mysql数据库存储过程、函数、视图、触发器、表...

概述抽空总结一下mysql的一些概念性内容&#xff0c;涉及存储过程、函数、视图、触发器等。一、查看存储过程、函数、视图、触发器、表1、存储过程select * from mysql.proc where typePROCEDURE;show procedure status; show create procedure proc_name; //存储过程定义2、函…

文本框内容改变触发事件

input 在IE中有onchange事件&#xff0c;但是这个事件所表现的效果不是我们想要的&#xff0c;它所表现的效果为&#xff1a;当input内的内容发现更改时&#xff0c;并不会触发你所指定的方法&#xff08;函数&#xff09;&#xff0c;所以一般的人不用使用这个事件&#xff0c…

oracle vm发现无效设置_Oracle数据库编译失效对象相关命令总结大全,值得收藏

概述在日常数据库维护过程中&#xff0c;我们会发现数据库中一些对象(包Package、存储过程Procedure、函数Function、视图View、同义词.....)会失效,呈现无效状态(INVALID)。有时候需要定期检查数据库中存在哪些失效对象&#xff0c;对于存在异常的对象需要重新编译&#xff0c…

WCF-001:WCF的发布

随着“云”时代的到来&#xff0c;“云”已经无处不在了。什么是“云”&#xff0c;无非就是利用互联网强大的功能建立多个服务器&#xff0c;然后再利用互联网的传输数据的特点将数据从某个服务器中读取出来或者将你的数据上传上去。当然这个服务器不是一定就是传统意义的服务…

在线编辑_水墨-在线 Markdown 编辑器

水墨-在线 Markdown 编辑器基于 Spring-boot、FreeMarker、layui、Vditor 构建的一款在线 所见即所得的 Markdown 编辑器。水墨-在线 Markdown 编辑器。本人使用 Vditor 编辑器时日已久&#xff0c;眼看着其功能日益强大&#xff0c;特此基于 Vditor 构建一款 Web 编辑器&#…

(转载)mysql 用drop和delete方法删除用户的区别

&#xff08;转载&#xff09;http://hi.baidu.com/yymagento/item/56c3f6184bce8347e75e06db在学习drop方法删除用户时&#xff0c;按照书上讲的一直没操作成功&#xff0c;后来到网上查了点其他资料&#xff0c;才弄明白drop的方法&#xff0c;贴出来和大家分享一下。 &#…

退出出库复核是什么意思_细思极恐!为什么是黄晓明退出而不是李菲儿?因为女方是芒果艺人...

本文转载自&#xff1a;娱评人吴清功序言&#xff1a;《乘风破浪的姐姐》第二季即将接档《姐姐的爱乐之程》&#xff0c;于每周五晚上十点档播出。2021年1月5日&#xff0c;《乘风破浪的姐姐2》第一次公演举行&#xff0c;选手李菲儿和发起人黄晓明有亲密互动&#xff0c;李菲儿…