首页 > 编程语言 >从C#中的数组中删除指定元素的几种方法,超简单

从C#中的数组中删除指定元素的几种方法,超简单

时间:2023-04-03 12:45:09浏览次数:32  
标签:删除 C# 元素 int numbers 数组 方法 valueToRemove

最近小编同事面试遇到了一道面试题,题目是有个int数组,把输入包含的指定元素删除。这道题主要考察C#基础知识和编码动手能力。小编将以如下几种方法实现,供大家参考。(注:文末还有扩展问题。)

1、使用临时数组copy后替换

这种方法涉及创建一个比原始数组小一个元素的新数组。然后,将原始数组复制到新数组中,但不包括要删除的元素。最后,将新数组分配给原始数组。示例如下:

int[] numbers = { 1, 2, 3, 4, 5, 6 };
//移除的元素
int valueToRemove = 5;
//新建一个数组,长度为操作数组的长度-1
int[] newNumbers = new int[numbers.Length - 1];
int index = 0;
for (int i = 0; i < numbers.Length; i++)
{
   if (numbers[i] != valueToRemove)
   {
      newNumbers[index] = numbers[i];
      index++;
   }
}
numbers = newNumbers;
Console.WriteLine(String.Join(",", numbers ));
//结果为:1 2 3 4 6

2、使用LINQ的Where和ToArray方法

另一种使用LINQ的方法是使用Where方法来过滤出不包含要删除元素的序列,然后使用ToArray方法将序列转换回数组。这种方法的优点是它更简洁,但在处理大型数据集时可能会比第一个方法慢。示例如下:

int[] numbers = { 1, 3, 4, 5, 4, 2 };
//移除的元素
int valueToRemove = 5;
numbers = numbers.Where(val => val != valueToRemove).ToArray()
Console.WriteLine(String.Join(",", numbers));
//结果:1 3 5 2

3、使用LINQ的Array.FindAll() 方法

Array.FindAll() 方法返回一个数组,其中包含与指定谓词匹配的所有元素。以下是演示此方法用法的简单示例:

int[] array = { 1, 3, 4, 5, 4, 2 };
int valueToRemove = 4;
array = Array.FindAll(array, i => i != valueToRemove).ToArray();
Console.WriteLine(String.Join(",", array));
//结果:1 3 5 2

4、使用LINQ的Enumerable.Except() 方法

另一种解决方案是使用 Enumerable.Except() 方法,它比较两个序列并返回仅出现在第一个序列中的元素。该方法演示如下:

int[] array = { 1, 3, 4, 5, 4, 2 };
int item = 4;
array = array.Except(new int[] { item }).ToArray();
Console.WriteLine(String.Join(",", array));
//结果:1 3 5 2

5、使用List类的RemoveAll方法

这种方法涉及使用泛型List类而不是数组。List类提供了一种方便的方法来删除符合给定条件的所有元素。示例如下:

List<int> numbers = new List<int> {1, 3, 4, 5, 4, 2  };
int valueToRemove = 4;
numbers.RemoveAll(x => x == valueToRemove);
Console.WriteLine(String.Join(",", numbers));
//结果:1 3 5 2

扩展

小编的同事又说了另一个问题,面试官说“输入的元素在数组里有重复,只删除一个元素”怎么实现。这种实现其实只需要找到第一个数字的索引,根据索引来删除这个数字。实现原理只需要改动上面第5个方法。示例如下:

List<int> nums= new List<int> {1, 3, 4, 5, 4, 2  };
int item= 4;
nums.RemoveAt(nums.IndexOf(item));
Console.WriteLine(String.Join(",", nums));
//结果:1 3 5 4 2

结语

本文讲述了从C#中的数组中删除指定元素的5种方法,这种题一般会出现在初级程序员面试中,主要考察C#基础和编码动手能力,大家任意用一种方法实现即可,如果强调不能用函数,可以使用第一种方法。希望本文对你有所帮助,同时欢迎留言和吐槽。

来源公众号:DotNet开发跳槽 

标签:删除,C#,元素,int,numbers,数组,方法,valueToRemove
From: https://www.cnblogs.com/xbhp/p/17282745.html

相关文章

  • C++:实现RAII机制
    RAII,也称资源获取即初始化,要求资源的有效期与持有资源的对象的生命期严格绑定,不会出现内存泄漏等问题。我们尝试将指针封装到RAII类中,实现自动析构。#include<iostream>usingnamespacestd;template<typenameT>classRAII{public: RAII():data(nullptr){} explic......
  • Vertica中的group_concat函数
    MySQL中一个很实用的函数:group_concat,在vertica中,有一个功能相同的函数:LISTAGG。Vertica官方参考文档用法:selectclient_id,LISTAGG(prod_code)frombdware.test1groupbyclient_id默认最大返回长度是1024,如果超出1024,默认策略是报错,可以手动调整为截取模式。如下:s......
  • 220602-多维数组的Jaccard指数计算
    背景:计算两个多维数据的交并商a=np.arange(0,9).reshape(-1,3)print(a)b=np.arange(4,13).reshape(-1,3)print(b)c=np.random.rand(4,3)print(c,'\n')A=np.concatenate([a,c],axis=0)B=np.concatenate([b,c],axis=0)print(A)print(B)defjaccard_ind......
  • 221114-华中科技大学学位论文利用Pandoc实现LaTex转Word
    LaTex快乐地编辑排版好论文,然后学校系统提交还是要Word文档TT利用Pandoc将.tex直接转换成.docxpandochust_main.tex-ohust_main.docx-wdocx\--reference-dochust_temp.docx\--filterpandoc-crossref\--bibliography=main_ref.bib\--ci......
  • 180114 Sklearn.GaussianMixture中的convaiance_type说明
    协方差矩阵的几何解释sklearn.GaussianMixturecovariance_type:{‘full’,‘tied’,‘diag’,‘spherical’},‘full’(eachcomponenthasitsowngeneralcovariancematrix),‘tied’(allcomponentssharethesamegeneralcovariancematrix),‘diag’(eachcom......
  • anaconda在linux下的安装配置
    首先上Linux官网下载最新对应版本的Anaconda安装包链接:https://www.anaconda.com/products/distribution#Downloads因为我们是在Linux系统下安装Anaconda,所以选择Linux平台的64位版本终端找到安装包当前文件目录用sh命令执行.sh文件,开始安装shAnaconda3-year.mo......
  • containerd命令--ctr和crictl
    ctr[root@master~]#ctr--helpNAME:ctr-containerdCLIUSAGE:ctr[globaloptions]command[commandoptions][arguments...]VERSION:v1.6.19DESCRIPTION:ctrisanunsupporteddebugandadministrativeclientforinteractingwiththeconta......
  • C语言-变量的存储类型
    0存储类型是指变量占用内存空间的方式,也称为存储方式。从内存分配的时间上,可分为“静态存储”和“动态存储”类。  0.1静态存储:在程序前,系统(编译器)自动分配内,程序结束后,系统(编译器)自动释放。  0.2动态存储:在程序执行时;根据需要手动分配内存,使用完成后再手动释放。1C......
  • 恢复lazarus使用anchorDocking和dockedformeditor后出现ide乱的步骤
    恢复lazarus使用anchorDocking和dockedformeditor后,很容易因使用时不小心拖动form后出现越调越的情况,经模索发现将environmentoptions.xml删除后,再运行lazarus,当出现这提示时,重新设置一下       ......
  • SpringMVC大文件上传解决方案支持分片断点上传
    ​ 以ASP.NETCoreWebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API,包括文件的上传和下载。 准备文件上传的API #region 文件上传  可以带参数        [HttpPost("upload")]        publicJsonResultuploadProject(I......