C# 一维数组与二维数组相互转换
class Program
{
    static void Main(string[] args)
    {
        double[] a = { 1, 2, 3, 4, 5, 6 };
        double[,] b = Row2VecD(a);
        double[,] c = Row2ArrT(a, 2);
        //double[,] c = RowToArrD(a, 2);
        double[] d = Arr2RowD(c);
        Console.WriteLine("\n行向量→列向量");
        for(int i = 0; i < b.GetLength(0); i++)
        {
            for(int j = 0; j < b.GetLength(1); j++)
            {
                Console.WriteLine("b[{0},{1}]:{2}", i, j, b[i, j]);
            }
        }
        Console.WriteLine("\n\n行向量→数组");
        for (int i = 0; i < c.GetLength(0); i++)
        {
            for (int j = 0; j < c.GetLength(1); j++)
            {
                Console.WriteLine("c[{0},{1}]:{2}", i, j, c[i, j]);
            }
        }
        Console.WriteLine("\n\n数组→行向量");
        for (int i = 0; i < d.Length; i++)
        {
            Console.WriteLine("d[{0}]:{1}", i, d[i]);
        }
        Console.ReadKey();
    }
    //行向量→数组(内存复制版)
    static double[,] RowToArrD(double[]src,int row)
    {
        if (src.Length % row != 0) return null;
        int col = src.Length / row;
        double[,] dst = new double[row, col];
        for(int i = 0; i < row; i++)
        {
            //说明:“二维数组”【顺序储存】<=>“一维数组”
            Buffer.BlockCopy(src, i * col * sizeof(double), dst, i * col * sizeof(double), col * sizeof(double));
        }
        return dst;
    }
    //行向量→列向量(内存复制版)
    static double[,] Row2VecD(double[] src)
    {
        double[,] dst = new double[src.Length, 1];
        Buffer.BlockCopy(src, 0, dst, 0, sizeof(double) * src.Length);
        return dst;
    }
    //行向量→数组(循环版;泛型版)
    static T[,] Row2ArrT<T>(T[] vec, int row)
    {
        if (vec.Length % row != 0) return null;
        int col = vec.Length / row;
        T[,] ret = new T[row, col];
        for (int i = 0; i < vec.Length; i++)
        {
            ret[i / col, i % col] = vec[i];
        }
        return ret;
    }
    //数组→行向量(内存复制版)
    static double[] Arr2RowD(double[,] src)
    {
        int elem = src.GetLength(0) * src.GetLength(1);
        double[] dst = new double[elem];
        Buffer.BlockCopy(src, 0, dst, 0, elem * sizeof(double));
        return dst;
    }
}
C# 一维数组与二维数组相互转换的更多相关文章
- C#的一维数组和二维数组定义方式:
		一维数组: //一维数组定义与初始化 ,, };//第一种方式 , , }; //第二种方式 int[] one3; //第三种方式 one3=,,}; 二维数组: //二维数组定义与初始化 //不规 ... 
- C#  数组、一维数组、二维数组、多维数组、锯齿数组
		C# 数组.一维数组.二维数组.多维数组.锯齿数组 一.数组: 如果需要使用同一类型的对象,就可以使用数组,数组是一种数据结构,它可以包含同一类型的多个元素.它的长度是固定的,如长度未知的情况下,请 ... 
- java基础5 (一维)数组和二维数组
		本文知识点(目录): 一维数组(一维数组的概念.优点.格式.定义.初始化.遍历.常见异常.内存分析以及常见操作(找最大值.选择排序.冒泡排序等等)) 二维数组(二维数组的遍历.排序.查找.定义. ... 
- 二维数组,锯齿数组和集合  C# 一维数组、二维数组(矩形数组)、交错数组(锯齿数组)的使用  C# 数组、多维数组(矩形数组)、锯齿数组(交叉数组)
		二维数组,锯齿数组和集合 一.二维数组 二维数组:一维数组----豆角二维数组----表格 定义:1.一维数组:数据类型[] 数组变量名 = new 数据类型[数组长度];数据类型[] 数组变量名 = ... 
- android JNI 一维数组、二维数组的访问与使用
		在JNI中访问JAVA类中的整型.浮点型.字符型的数据比较简单,举一个简单的例子,如下: //得到类名 jclass cls = (*env)->GetObjectClass(env, obj) ... 
- js一维数组转换为二维数组
		function arrTrans(num, arr) { // 一维数组转换为二维数组 const iconsArr = []; // 声明数组 arr.forEach((item, index) ... 
- 一维数组、二维数组——Java
		一. 一维数组 1. 数组是相同类型数据的有序集合 相同类型的若干个数据,按照一定先后次序排列组合而成 每个数组元素可以通过一个下标来访问它们 其中,每一个数据称作一个数组元素 2. 数组特点: 其 ... 
- 第二篇 javascript一维数组和二维数组及方法
		一.数组 什么是数组 程序=数据+算法 数组就是一种很常见的保存批量数据的数据结构 一.定义数组 var arr1=[]; //定义了一个不包含元素的数组 ,,]; //定义了一个包含三个元素的数组 ... 
- c#简单实现二维数组和二维数组列表List<>的转置
		刚看到网上一篇文章里用sql实现了行列转置.sql server 2005/2008只用一个pivot函数就可以实现sql server 2000很多行的复杂实现.提到转置,立刻想起还在求学阶段曾经做 ... 
- Java数组之二维数组
		Java中除了一维数组外,还有二维数组,三维数组等多维数组.本文以介绍二维数组来了解多维数组. 1.二维数组的基础 二维数组的定义:二维数组就是数组的数组,数组里的元素也是数组. 二维数组表示行列二维 ... 
随机推荐
- 工作面试老大难-MySQL中的锁类型
			MySQL 是支持ACID特性的数据库.我们都知道"C"代表Consistent,当不同事务操作同一行记录时,为了保证一致性,需要对记录加锁.在MySQL 中,不同的引擎下的锁行为 ... 
- 如何用 Unity 做出一只赛博宠物
			推荐的一些学习资料 unity 官方文档:Unity 用户手册 (2019.4LTS) - Unity 手册 视频教程:https://www.bilibili.com/video/BV1zB4y1C ... 
- SwiftUI(一)- VStack、HStack、ZStack布局
			SwiftUI是什么 懒得写,直接找了一篇博客: 初识 SwiftUI 三种布局 SwiftUI包括三种布局: VStack: 纵向布局,默认居中对齐 HStack: 横向布局,默认居中对齐 ZSta ... 
- ChatGPT还是有点东西的-public static <T> List<T> Arrays.asList(T... a) {...}
			背景 业务开发需要判断业务状态是否在30.40.50.60的集合内,所以写了以下代码 int[] inLiq = {30,40,50,60}; return Arrays.asList(inLiq). ... 
- 005. gitlab安装
			1. gitlab介绍 官方网站: www.gitlab.com gitlab是一款使用ruby编写的代码版本管理系统,他可以通过web界面来管理代码. 2. gitlab安装 官方安装文档: htt ... 
- Redis单线程
			Redis是基于Reactor模式开发的网络事件处理器,这个处理器是单线程的,所 以redis是单线程的. 为什么它是单线程还那么快呢? 主要有以下几个原因: 一.纯内存操作 由于Redis是纯内存操 ... 
- 你知道键盘是如何工作的吗?(xv6键盘驱动程序)
			键盘驱动程序 公众号:Rand_cs 键盘如何工作的前文曾经说过,当时是以 Linux 0.11 为基础讲的但不系统,本文以 xv6 的键盘驱动程序为例来系统地讲述键盘是如何工作的.关于驱动程序前文磁 ... 
- ABC321题解
			E: problem LCA题. 我们枚举向上跳 \(t\) 步,跳到了 \(y\). 假如说 \(t = 0\) 那么我们计算 \(\text{clac}(x,k)\) 即可.(\(\text{cl ... 
- vue排行榜 加单位
- 增补博客 第七篇 python 比较不同Python图形处理库或图像处理库的异同点
			OpenCV.Pillow 和 scikit image OpenCV(OpenCV 是一个强大的计算机视觉库,它提供了各种图像处理和计算机视觉算法的实现,可以处理各种图像和视频数据. 异同点 跨平台 ... 
