当前位置: 首页 > article >正文

C#自定义工具类-数组工具类

目录

数组工具类基本操作

1.排序:升序,降序

2.查找

1)查找最值:最大值,最小值

2)查找满足条件的单个对象

3)查找满足条件的所有对象

4)选取数组中所有对象的某一字段

完整代码

测试

1.测试代码

2.测试结果


       本篇文章来分享一下如何实现数组工具类。工具类,一般具有很强的通用性,复用性很强,在需要时就可以移植到项目,可以让我们的工作更加快捷方便。今天要分享的数组工具类实现了有关数组基本操作。

数组工具类基本操作

1.排序:升序,降序

       可以参考 【一文读懂】C#如何实现通用的排序功能 进行理解

/// <summary>
/// 选择委托
/// 返回数据类型T的属性Tkey的值
/// </summary>
/// <typeparam name="T">数据类型</typeparam>
/// <typeparam name="Tkey">数据类型T的字段</typeparam>
/// <returns>选择的属性</returns>
public delegate TKey SelectHandler<T, TKey>(T t);//注意是写在类外

/// <summary>
/// 使用委托对任何数据类型数组进行升序排序
/// </summary>
/// <typeparam name="T">数据类型</typeparam>
/// <typeparam name="Tkey">数据类型T的字段</typeparam>
/// <param name="array">数据类型T的数组</param>
/// <param name="selectHandler">选择委托的对象</param>
public static void OrderBy<T, Tkey>(T[] array, SelectHandler<T, Tkey> selectHandler)
    where Tkey : IComparable<Tkey>
{
    for (int i = 0; i < array.Length; ++i)
    {
        for (int j = i + 1; j < array.Length; ++j)
        {
            //将委托已经取得数据类型的属性的进行比较
            if (selectHandler(array[i]).CompareTo(selectHandler(array[j])) > 0)
            {
                T temp = array[i];
                array[i] = array[j];
                array[j] = temp;
            }
        }
    }
}

/// <summary>
/// 使用委托对任何数据类型数组进行降序排序
/// </summary>
/// <typeparam name="T">数据类型</typeparam>
/// <typeparam name="Tkey">数据类型T的字段</typeparam>
/// <param name="array">数据类型T的数组</param>
/// <param name="selectHandler">选择委托的对象</param>
public static void OrderByDescending<T, Tkey>(T[] array, SelectHandler<T, Tkey> selectHandler)
    where Tkey : IComparable<Tkey>
{
    for (int i = 0; i < array.Length; ++i)
    {
        for (int j = i + 1; j < array.Length; ++j)
        {
            //将委托已经取得数据类型的属性的进行比较
            if (selectHandler(array[i]).CompareTo(selectHandler(array[j])) < 0)
            {
                T temp = array[i];
                array[i] = array[j];
                array[j] = temp;
            }
        }
    }
}

2.查找

1)查找最值:最大值,最小值

/// <summary>
/// 查找最大值
/// </summary>
/// <typeparam name="T">数据类型</typeparam>
/// <typeparam name="Tkey">数据类型T的字段</typeparam>
/// <param name="array">数据类型T的数组</param>
/// <param name="selectHandler">选择委托的对象</param>
/// <returns>返回T类型的数组中字段Tkey最大的数据</returns>
public static T Max<T, Tkey>(T[] array, SelectHandler<T, Tkey> selectHandler)
    where Tkey : IComparable<Tkey>
{
    T temp = array[0];
    for (int i = 1; i < array.Length; ++i)
    {
        //将委托已经取得数据类型的属性的进行比较
        if (selectHandler(temp).CompareTo(selectHandler(array[i])) < 0)
 

http://www.kler.cn/a/322620.html

相关文章:

  • 智能指针原理、使用和实现——C++11新特性(三)
  • 工厂模式-简单工厂模式
  • 问:说说SpringDAO及ORM的用法?
  • Bugku CTF_Web——No one knows regex better than me
  • 一个win32 / WTL下多线程库(CThread类)的使用心得
  • 蓝桥杯——数组
  • XML 实例:深入解析与实际应用
  • 如何从格式化的笔记本电脑或台式机中恢复照片
  • C++进阶—>这3个问题难道搞不懂多态???
  • 对Spring-AI系列源码的讲解
  • 线性判别分析 (LDA)中目标函数对S_w进行奇异值分解的说明
  • 如何在Mac上查看剪贴板历史记录
  • 数据技术进化史:从数据仓库到数据中台再到数据飞轮的旅程
  • python示例(加减乘除....)
  • Hive SQL业务场景:连续5天涨幅超过5%股票
  • 排序--堆排序【图文详解】
  • C++入门day5-面向对象编程(终)
  • 【鸿蒙】HarmonyOS NEXT开发快速入门教程之ArkTS语法装饰器(下)
  • Oracle 启动对应数据库实例数据库方法
  • Golang优雅关闭gRPC实践
  • 【CSS in Depth 2 精译_041】6.4 CSS 中的堆叠上下文与 z-index(上)
  • 短剧向左,体育向右,快手前途未卜?
  • Python爬虫之urllib模块详解
  • 通过 GitLab API 实现 CHANGELOG.md 文件的自动化上传至指定分支
  • GS-SLAM论文阅读笔记--GLC-SLAM
  • 3D建模:Agisoft Metashape Professional 详细安装教程分享 Mac/win