标签: jagged-arrays

如何在C#中按行排序锯齿状数组?

我有2D锯齿状阵列.我希望按行排序.

我搜索并找到了按列排序的代码

private static void Sort<T>(T[][] data, int col) 
{ 
    Comparer<T> comparer = Comparer<T>.Default;
    Array.Sort<T[]>(data, (x,y) => comparer.Compare(x[col],y[col])); 
}
Run Code Online (Sandbox Code Playgroud)

我可以根据任何行调整它吗?

任何帮助表示赞赏.

我的锯齿状阵列样本(已添加)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            int n = 10;
            int[][] capm = new int[3][];
            for (int i = 0; i <= 2; i++)
            {
                capm[i] = new int[n + 1];
            }
            Random rand = new Random();            
            for (int i = 1; i <= n; …
Run Code Online (Sandbox Code Playgroud)

c# sorting row jagged-arrays

8
推荐指数
1
解决办法
2703
查看次数

"真正的"多维数组的定义是什么,哪些语言支持它们?

我读过的大多数编程书都有以下几行:

"X语言不支持真正的多维数组,但你可以用数组数组模拟(近似)它们."

由于我的大部分经验都是基于C语言,即C++,Java,JavaScript,php等,我不确定"真正的"多维数组是什么.

真正的多维数组的定义是什么以及支持它的语言是什么?另外,如果可能的话,请在代码中显示一个真正的多维数组的示例.

language-agnostic language-theory jagged-arrays multidimensional-array

8
推荐指数
1
解决办法
1556
查看次数

将T [,]转换为T [] []的最快方法?

因此,事实证明并非创建的所有阵列等.多维数组可以具有非零下限.请参阅Excel PIA的Range.Value属性object[,] rectData = myRange.Value;

我需要将这些数据转换为锯齿状数组.我第一次尝试下面的复杂气味.有什么优化建议吗?它需要处理下限可能不为零的一般情况.

我有这个ex方法:

    public static T[][] AsJagged<T>( this T[,] rect )
    {
        int row1 = rect.GetLowerBound(0);
        int rowN = rect.GetUpperBound(0);
        int col1 = rect.GetLowerBound(1);
        int colN = rect.GetUpperBound(1);

        int height = rowN - row1 + 1;
        int width = colN - col1 + 1;
        T[][] jagged = new T[height][];

        int k = 0;
        int l;
        for ( int i = row1; i < row1 + height; i++ )
        {
            l = 0;
            T[] …
Run Code Online (Sandbox Code Playgroud)

c# arrays jagged-arrays multidimensional-array

8
推荐指数
2
解决办法
448
查看次数

将锯齿状数组转换为2D数组C#

我正在尝试将此函数从Jagged Array转换为2D数组,而我无法转换所有内容原始函数:

public static double[][] InvertMatrix(double[][] A)
{
    int n = A.Length;
    //e will represent each column in the identity matrix
    double[] e;
    //x will hold the inverse matrix to be returned
    double[][] x = new double[n][];
    for (int i = 0; i < n; i++)
    {
        x[i] = new double[A[i].Length];
    }
    /*
    * solve will contain the vector solution for the LUP decomposition as we solve
    * for each vector of x.  We will combine the solutions into the …
Run Code Online (Sandbox Code Playgroud)

c# arrays jagged-arrays

8
推荐指数
3
解决办法
8817
查看次数

数据中的锯齿状数组| 文本到列

是)我有的

让我们举一个有效的代码示例.

Sub Sample()
    Dim ws As Worksheet

    Set ws = ThisWorkbook.Sheets("Sheet1")

    ws.Columns(1).TextToColumns _
        Destination:=Range("A1"), _
        DataType:=xlFixedWidth, _
        FieldInfo:=Array( _
                        Array(0, 1), Array(60, 1), Array(120, 1), Array(180, 1), _
                        Array(240, 1), Array(300, 1), Array(360, 1), Array(420, 1) _
                         ), _
        TrailingMinusNumbers:=True
End Sub
Run Code Online (Sandbox Code Playgroud)

我想要的是

在一小组数据中,上述代码有效.但是,如果我想说出来Array(2700,1)怎么办?这意味着我必须写46时间Array(0, 1), Array(60, 1)...Array(1080, 1)....Array(2700, 1)

我试过了什么

我试过用这种方法

Sub Sample()
    Dim ws As Worksheet
    Dim MyArray
    Dim MyStr As String
    Dim i As Long

    For i = 0 To 2700 Step …
Run Code Online (Sandbox Code Playgroud)

excel vba jagged-arrays excel-vba

8
推荐指数
1
解决办法
648
查看次数

手动索引锯齿状阵列?

我在我的程序中遇到性能瓶颈,我需要在紧密的循环中数百万次访问数组中的元素.

我环顾四周,普遍的共识似乎是即使多维数组应该更快,它们的底层实现也是低效的,所以只需使用锯齿状数组.我对它进行了分析,肯定的是,锯齿状阵列的速度提高了50%.精细.

但是,我也尝试过手动索引(例如,通过执行类似这样的操作object value = array[i * 24 + j]; (where 24 is an array size)来模拟多维数组的行为:并通过乘法来访问它,并使用乘法来模拟多维数组.

令人惊讶的是,对于访问而言,这也比锯齿状阵列快15%(我只关心).这让我感到很难过,因为一方面,手动重新创建多维数组比C#的内置实现要快得多,而且两个,与仅使用锯齿状/多维数组进行索引相比,获取指标所涉及的数学更为丑陋.

有什么办法可以在不使用我自己的手动索引的情况下收回速度优势吗?当然可以设置或检查某种优化来模拟这种行为?为什么数组的C#实现效率低下?

c# arrays performance jagged-arrays

8
推荐指数
1
解决办法
257
查看次数

反向C#锯齿形数组类型声明

我刚才有一个"什么......"的时刻.以下是否有意,C#中的数组"非自然"声明背后是否存在一些模糊的推理?

int[,][] i; // declares an 2D - array where each element is an int[] !
// you have to use it like this:
i = new int[2,3][];
i[1,2] = new int[0];
Run Code Online (Sandbox Code Playgroud)

我本来期待相反的方式.int [,] []声明一维数组,其中每个元素都是二维数组.

有趣的是,类型的名称是相反的:

Console.WriteLine(typeof(int[,][]).Name); // prints "Int32[][,]"
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下吗?这是故意的吗?(在Windows下使用.NET 4.5.)

c# jagged-arrays multidimensional-array

7
推荐指数
1
解决办法
629
查看次数

大型多维数组(Jagged Array)C#的解决方法?

我正在尝试初始化三维数组以加载体素世界.

地图的总大小应为(2048/1024/2048).我试图初始化一个"int" 的锯齿状数组,但是我抛出了一个内存异常.尺寸限制是多少?我桌子的大小:2048*1024*2048 = 4'191'893'824

有人知道解决这个问题吗?

// System.OutOfMemoryException here !
int[][][] matrice = CreateJaggedArray<int[][][]>(2048,1024,2048);
// if i try normal Initialization I also throws the exception
int[, ,] matrice = new int[2048,1024,2048];

    static T CreateJaggedArray<T>(params int[] lengths)
    {
        return (T)InitializeJaggedArray(typeof(T).GetElementType(), 0, lengths);
    }

    static object InitializeJaggedArray(Type type, int index, int[] lengths)
    {
        Array array = Array.CreateInstance(type, lengths[index]);
        Type elementType = type.GetElementType();

        if (elementType != null)
        {
            for (int i = 0; i < lengths[index]; i++)
            {
                array.SetValue( …
Run Code Online (Sandbox Code Playgroud)

c# memory arrays jagged-arrays multidimensional-array

7
推荐指数
1
解决办法
3364
查看次数

C#/ C++:如何可视化多维数组

例如:二维数组可以像砖墙一样用方形砖可视化,其中每个砖代表我们阵列中的坐标.三维数组可以以相同的方式可视化为框或立方体.

但是,这是一个棘手的部分,您如何可视化具有多个(超过3个)维度的数组?或者,对于那个部分,如何使用多个维度,但多个维度中的多个维度可视化数组?

例如:如何可视化这样的数组:数组[3,3,3,3] [3,3] [3,3,3,3,3] [3]?

c# c++ arrays jagged-arrays

6
推荐指数
2
解决办法
1万
查看次数

快速引用内部数组

我来自C#世界,曾经习惯于将数组作为引用类型。据我了解,快速数组中的是值类型,但它们试图充当参考值。

我实际上不知道如何问自己需要什么(我认为这是当我需要知道答案才能提出问题时的情况),但是在C#中,我会说我需要存储对a的内部数组的引用锯齿状数组变成局部变量。

考虑以下代码:

// a function to change row values in-place
func processRow(inout row : [Int], _ value : Int)
{
    for col in 0..<row.count
    {
        row[col] = value;
    }
}

// a function to change matrix values in-place
func processMatrix(inout matrix : [[Int]])
{
    for rowIdx in 0..<matrix.count
    {
        // (1) Works with array in-place
        processRow(&(matrix[rowIdx]), -1)

        // (2) Creates local copy
        var r = matrix[rowIdx]; // <--- What to write here to not make a copy but still …
Run Code Online (Sandbox Code Playgroud)

c# arrays jagged-arrays mutability swift

6
推荐指数
1
解决办法
152
查看次数