C#把数组中的某个元素取出来放到第一个位置的实现方法
作者:shichen2014 发布时间:2021-11-26 00:17:36
标签:C#,数组
本文实例讲述了C#把数组中的某个元素取出来放到第一个位置的实现方法。分享给大家供大家参考。具体分析如下:
如何取出数组中符合某种条件的元素,然后放在数组最前面,即索引为0的位置?
思路大致如下:
① 找到符合条件的数组元素,把之赋值给一个临时变量temp,并记下该数组元素的索引位置,假设是index
② 在源数组中,从索引为0的数组元素开始,拷贝index个数组元素到另外一个目标数组
③ 把临时变量temp赋值给目标数组索引为0的位置
public static class ArrHelper
{
/// <summary>
/// 对类型为T的数组进行扩展,把满足条件的元素移动到数组的最前面
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="arr">源数组</param>
/// <param name="match">lamda表达式</param>
/// <returns></returns>
public static bool MoveToFront<T>(this T[] arr, Predicate<T> match)
{
//如果数组的长度为0
if (arr.Length == 0)
{
return false;
}
//获取满足条件的数组元素的索引
var index = Array.FindIndex(arr, match);
//如果没有找到满足条件的数组元素
if (index == -1)
{
return false;
}
//把满足条件的数组元素赋值给临时变量
var temp = arr[index];
Array.Copy(arr, 0, arr, 1, index);
arr[0] = temp;
return true;
}
public static void PrintArray<T>(T[] arr)
{
foreach (var item in arr)
{
Console.Write(item + " ");
}
Console.WriteLine();
}
}
以上,是针对泛型数组的扩展,所以可以直接使用数组实例调用扩展方法。
class Program
{
static void Main(string[] args)
{
int[] intArr = new int[]{1, 2, 3, 4, 5};
ArrHelper.PrintArray(intArr);
intArr.MoveToFront(i => i == 3);
ArrHelper.PrintArray(intArr);
Console.ReadKey();
}
}
希望本文所述对大家的C#程序设计有所帮助。


猜你喜欢
- persistence.xml配置文件修改存放路径今天整合Spring、struts2和Spring Data JPA的时候遇到以下问题,现
- (1)很多朋友在使用genymotion开发安卓应用程序的时候,会遇见完全正确的安装但是在运行的时候仍然找不到,genymotion上的设备
- 栈和队列的本质是相同的,都只能在线性表的一端进行插入和删除。因此,栈和队列可以相互转换。用栈实现队列—力扣232题题目要求:仅使用两个栈实现
- 自定义View分为继承自View和ViewGroup,继承ViewGroup相比继承View在事件分发上ViewGroup多dispatch
- 标准函数标准函数就是在Standard.kt文件中定义的函数,任何Kotlin代码都可以自由地调用所有的标准函数let函数就属于是一个标准函
- 在jdk文档中对RandomAccess接口的定义如下: public interface RandomAccess下面是jdk
- 本文实例为大家分享了Android开发实现抽屉菜单的具体代码,供大家参考,具体内容如下实现效果点击菜单图表即可进入抽屉代码实现1、打开app
- spring缓存cache的使用在spring配置文件中添加schema和spring对缓存注解的支持:<?xml version=&
- 今天看了一下数据结构,一个练习就是构建哈夫曼树,就顺手用C#写了一个。static void Main(string[] args){ &n
- 自定义View实现一个弹性滑动的效果,供大家参考,具体内容如下实现原理onMeasure()中测量所有子View @Override pro
- 一.并行LINQSystem.Linq名称空间中包含的类ParallelEnumerable可以分解查询的工作,使其分布在多个线程上。尽管E
- 很多Android手机上都配有LED灯,比如HTC的手机在充电、新来短信等时候都会有响应的指示,其实很简单的这都是NotificationM
- List list=new ArrayList()是怎么回事首先明确List是接口,ArrayList是它的实现类以下两种方法都可以,但是不
- 概述java中的序列化可能大家像我一样都停留在实现Serializable接口上,对于它里面的一些核心机制没有深入了解过。直到最近在项目中踩
- float和double只能用来做科学计算或者是工程计算,在商业计算中我们要用 java.math.BigDecimal。而且使用BigDe
- 1、找准入口,使用ClassPathXmlApplicationContext的构造方法加载配置文件,用于加载classPath下的配置文件
- 一、String类概述String类代表字符串,java程序中的所有字符串文字(例如"abc")都被实现为此类的实例。也
- Android Studio打包.so库到apk中实例详解由于在原来的ADT的Eclipse环境中,用ndk_build工具生成了相应的各个
- 封装(Encapsulation)是面向对象编程的一个核心概念,它意味着将数据(属性)和方法(操作数据的函数)捆绑在一起,形成一个类(Cla
- 一般来说,在更新DataTable或是DataSet时,如果不采用SqlParameter,那么当输入的Sql语句出现歧义时,如字符串中含有