类模块——接口排序
时间:2022-07-22
本文章向大家介绍类模块——接口排序,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
能用好类与接口的话,代码的复用率会非常高,是个值得好好学习的东西。
用排序功能来举例,排序是经常使用到的,比如冒泡排序:
Sub BubbleSort(l())
Dim i As Long, j As Long
For i = 1 To UBound(l)
For j = i + 1 To UBound(l)
If l(i) > l(j) Then
Call Swap(l, i, j)
End If
Next j
Next i
End Sub
Function Swap(l(), Low As Long, High As Long)
Dim iTemp
iTemp = l(Low)
l(Low) = l(High)
l(High) = iTemp
End Function
有了这个函数,只要传入1个一维数组,函数执行完后数组就有序了。 但是,如果需要排序的是个二维数组的话,就不得不把排序函数重新写过一次,如果是结构体,又得重新写过…… 接口的使用,就可以最小化的来修改这些东西。 对于这个排序函数,不管传入的是什么数据,排序算法是固定的,不同的地方是:
- 2个数据的比较 (If l(i) > l(j) Then)
- 2个数据的交换 ( Swap)
排序算法是固定的,要修改的是这2个功能,只要传入的东西里面具有这2个功能就可以了,具有功能的东西,也就是类,类能有自己的方法。 但是又不能传入某种具体的类,因为数据的不同,这2个方法也是不相同的,这就需要接口了。接口ISort定义2个功能:
Function Swap(i As Long, j As Long)
End Function
Function Less(i As Long, j As Long) As Boolean
End Function
然后排序函数传入的是这个接口:
Sub BubbleSort(I_Sort As ISort, Low As Long, High As Long)
Dim i As Long, j As Long
For i = Low To High
For j = i + 1 To High
If I_Sort.Less(j, i) Then
I_Sort.Swap i, j
End If
Next j
Next i
End Sub
一维数据的实现:
Implements ISort
Private arr() As Variant
Property Let Data(Value As Variant)
arr = Value
End Property
Property Get Data() As Variant
Data = arr
End Property
'比较
Private Function ISort_Less(i As Long, j As Long) As Boolean
ISort_Less = arr(i) < arr(j)
End Function
'交换
Private Function ISort_Swap(i As Long, j As Long) As Variant
Dim tmp As Variant
tmp = arr(i)
arr(i) = arr(j)
arr(j) = tmp
End Function
二维数组实现接口:
Implements ISort
Private Type LowHigh
Low As Long
High As Long
End Type
Private arr() As Variant
Private i_col As Long '要排序的列
Private Col_Bound As LowHigh '列的上下标
Property Let SortCol(iCol As Long)
i_col = iCol
End Property
Property Let Data(Value As Variant)
arr = Value
Col_Bound.Low = LBound(arr, 2)
Col_Bound.High = UBound(arr, 2)
End Property
Property Get Data() As Variant
Data = arr
End Property
'比较
Private Function ISort_Less(i As Long, j As Long) As Boolean
ISort_Less = arr(i, i_col) < arr(j, i_col)
End Function
'交换
Private Function ISort_Swap(i As Long, j As Long) As Variant
Dim tmp As Variant
Dim k As Long
For k = Col_Bound.Low To Col_Bound.High
tmp = arr(i, k)
arr(i, k) = arr(j, k)
arr(j, k) = tmp
Next k
End Function
- 你不可错过的二维码生成与解析-java后台与前端js都有
- Windows服务创建及安装
- dede自定义表单增加添加时间怎么弄
- nodejs配置简单HTTP服务器
- marquee一行代码实现滚动跑马灯效果无需js
- 如何用SQL命令行工具删除dedecms指定id文章
- 怎么采集dedecms自定义内容模型
- dedecms怎样调用指定id文章?
- c++ list, vector, map, set 区别与用法比较
- 前台开发从头说起:谈谈CSS选择符
- dedecms无法登录提示本页面禁止返回
- 前台开发从头说起:理解css盒模型
- 两个js冲突怎么解决?试试这四个方法
- dedecms如何去除后台登陆验证码
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 设计模式(9)[JS版]-JavaScript设计模式之如何实现桥接模式???
- 前端基础:Boostrap
- 设计模式(10)[JS版]-JavaScript如何实现组合模式???
- JavaWeb - Servlet:基本概念,HTTP 协议,Tomcat 服务器
- 漫画:设计模式之 “工厂模式”
- 设计模式(11)[JS版]-JavaScript中的注解之装饰器模式
- JavaWeb - Servlet:重定向和转发,状态管理
- 设计模式(12)[JS版]--JavaScript必会设计模式之外观模式(Façade Pattern)
- JavaWeb - JSP:概述和语法,内置对象,JavaBean 组件,MVC 设计模式
- kill -9 导致 Kakfa 重启失败的惨痛经历!
- 图解 DataX 核心设计原理
- 不会吧不会吧,你不会还不知道这些提高JS代码质量的骚操作吧?
- Flask架站基础篇(一)--环境配置
- Flask架站基础篇(三)--Flask生成文件内容和文件夹详解
- Flask架站基础篇(四)--URL