【c#】数组使用汇总

1、二维数组初始化

public double[,] data = new double[2, 100];

Ps:
开发的时候,有试过创建长度为10000000的数组(局部变量),报错-->“如果要创建数组,请确保大小正确”
但创建为全局变量的时候不报错。
//据说在函数内部的变量都是在栈里,栈的大小根据编译器有不同,一般是1M

2、二维数组清空

Array.Clear(data, 0, data.Length); //清空索引0开始的数组内容

3、数组复制

(1)二维数组 Clone

newData = (double[,])data.Clone();

 

(2)一维数组 CopyTo

int[] copy = new int[array .Length];

array.CopyTo(copy, 0);

CopyTo方法用作将源数组全部拷贝到目标数组中,可以指定目标数组的起始索引,但需确保目标数组能容纳下源数组,CopyTo可用来合并多个数组。


Ps:
CopyTo()只适用于一维数组,虽然写的时候不会报错

4、获取二维数组长度

int row = Arr.GetLength(0); //行数

int col = Arr.GetLength(1); //列数

 

5、截取数组

byte[] data = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
byte[] tt = data.Skip(1).Take(data.Length).ToArray();

take的参数如果大于数组的长度,则截取到数组结束

 

6、数组批量赋相同值

int[] array = Enumerable.Repeat(0, 1000).ToArray();
//0是值,1000是数目,也就是数组的长度

7、数组作为构造函数传参时,报TypeInitializationExeption错误

官方说法:https://docs.microsoft.com/zh-cn/dotnet/api/system.typeinitializationexception?redirectedfrom=MSDN&view=net-5.0


通俗点的:https://blog.csdn.net/u012576247/article/details/39435437?utm_source=blogxgwz6

如果这个参数是静态变量的话,在执行构造函数的时候就会产生静态成员的初始化错误。
最快解决方法就是不要用静态变量作为传参。

 

8、数组拼接

SendByte = SendByte1.Concat(SendByte2).ToArray();

 

9、在数组内获取近似值

 

     public static void GetApproximate()
        {
            List<double> dataList = new List<double>(); //两个过零点间的数值数组
            double targetData = 23.22; //近似值
            try
            {
                int firstIndex = dataList.Select((d, i) =>
                {
                    return new
                    {
                        Value = d,
                        Index = i
                    };
                }).OrderBy(x => Math.Abs(x.Value - targetData)).First().Index; //获取与峰值的90%最相近相近的第一个索引

                //截取数组
                int lastIndex = dataList.Count() - firstIndex;
                dataList = dataList.GetRange(firstIndex, lastIndex - firstIndex);  

                //从数组中获取最小值
                double tempVmin = dataList.Min(); 
            }
            catch (Exception ex)
            {

            }
        }

 

 10、数组按绝对值从大到小排序,并取出前100个数求平均值

            List<double> tmpdataList = new List<double>();var tmpData = tmpdataList.Select((value, index) => new { index, value }).OrderByDescending(n => Math.Abs(n.value)).Take(100).ToArray();
            double dd = 0;
            for (int i = 0; i < tmpData.Count(); i++)
            {
                dd += tmpData[i].value;
            }
            dd = dd / 100;
            return;

直接取出绝对值最大的数:

var tmpOut = tmplist.Select((value, index) => new { index, value }).OrderByDescending(n => Math.Abs(n.value)).First();

 

11、获取指定元素索引

//先将数组转List
int
[] allIndices = tmpList.Select((s, i) => new { Str = s, Index = i }).Where(x => x.Str.Contains("xxx")).Select(x => x.Index).ToArray();

 

12、删除指定元素

//先将数组转List
List<string> newList = tmpList.Where(val => val.Contains("xxx") == false).ToList();

 参考:https://blog.csdn.net/zls365365/article/details/129965267

 

13、判断数组数据是否连续

        public static bool IsSequential(int[] a)
        {
            return Enumerable.Range(1, a.Length - 1).All(i => a[i] - 1 == a[i - 1]);
        }

 

posted @ 2021-04-16 14:45  不溯流光  阅读(729)  评论(0编辑  收藏  举报