标签: jagged-arrays

衣衫褴褛和锯齿状阵列

粗糙和锯齿状阵列有什么区别?根据我的研究,两者都有相同的定义,即具有不同列长度的二维阵列.

java arrays jagged-arrays

13
推荐指数
1
解决办法
3万
查看次数

Java和C#中的多维数组

在C#中,有两种方法可以创建多维数组.

int[,] array1 = new int[32,32];

int[][] array2 = new int[32][];
for(int i=0;i<32;i++) array2[i] = new int[32];
Run Code Online (Sandbox Code Playgroud)

我知道第一种方法在内部创建一维数组,第二种方法创建一个数组数组(访问速度较慢).

但是在Java中,没有[,]这样的东西,我看到多维数组声明如下:

int[][] array3 = new int[32][32];
Run Code Online (Sandbox Code Playgroud)

由于这种语法在C#中是非法的,而Java没有int[,],我想知道这是否等效array1?或者它仍然是一个数组数组?

c# java arrays jagged-arrays multidimensional-array

12
推荐指数
3
解决办法
6781
查看次数

具有可变大小行的C++ 2维数组

你怎么能创建一个2D数组,比如arr[][]5行,每行中的列数可变?

可能arr[5][] 是第一行arr[0][]有4列

第2行arr[1][]有5列,依此类推?

我不介意STL矢量解决方案,但我还不太了解矢量.

c++ arrays vector jagged-arrays multidimensional-array

12
推荐指数
3
解决办法
2万
查看次数

如何在JavaScript中初始化锯齿状数组?

是否可以在JavaScript中使用锯齿状数组?

这是我想要存储在锯齿状数组中的数据格式:

(key)(value1, value2, value3)
Run Code Online (Sandbox Code Playgroud)

我可以把它放在一个锯齿状的阵列中吗?

javascript jagged-arrays

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

如何在多维数组上使用LINQ来"展开"数组?

考虑以下数组:

int[,] numbers = new int[3, 2] { { 2, 1 }, { 3, 4 }, { 6, 5 } };

我想使用LINQ来构造一个数字为2,1,3,4,6,5的IEnumerable.

最好的方法是什么?

.net c# linq jagged-arrays multidimensional-array

11
推荐指数
3
解决办法
1万
查看次数

数组数组的可为空引用类型的问题

当然,C#支持一维和多维数组,并且支持数组的数组。众所周知,如果在数组数组中,内部数组类型与外部数组具有不同的等级(维数),则 C# 语言和 .NET 运行时在类型中给出括号的顺序上存在分歧姓名。尤其:

typeof(string[][,]).Name == "String[,][]"
Run Code Online (Sandbox Code Playgroud)

和:

typeof(string[,][]).Name == "String[][,]"
Run Code Online (Sandbox Code Playgroud)

所以可能会出现一些混乱,但它确实有效。

以下是此类类型的正确用法:

static void Foo1(string[,][] a) {
    //read:
    string[] entry = a[7, 8];
    //write:
    a[7, 8] = new string[] { "alfa", "bravo", "charlie", "delta", };
}

static void Bar1(string[][,] a) {
    //read:
    string[,] entry = a[9];
    //write:
    a[9] = new string[,] { { "echo", "foxtrot", }, { "golf", "hotel", }, { "india", "juliett", }, };
}
Run Code Online (Sandbox Code Playgroud)

读者可以自己验证它是否可以编译并且可以工作(当然必须传入足够大的数组)。

现在,当我们尝试将上述内容与可空引用类型结合起来时,就会出现严重的问题,正如 C# 8(从 2019 年起)以来的 C# 中所存在的那样。至少使用我这里的编译器实现(最新版本的 Visual Studio 2022)。也就是说,如果我做这个轻微的修改:

// …
Run Code Online (Sandbox Code Playgroud)

c# jagged-arrays compiler-bug arrayofarrays nullable-reference-types

10
推荐指数
0
解决办法
148
查看次数

使用LINQ方式初始化Jagged数组

我有一个二维锯齿状数组(虽然它总是矩形),我使用传统的循环初始化:

var myArr = new double[rowCount][];
for (int i = 0; i < rowCount; i++) {
    myArr[i] = new double[colCount];
}
Run Code Online (Sandbox Code Playgroud)

我想也许一些LINQ函数会在一个语句中给我一个优雅的方法来做到这一点.但是,我能想出的最接近的是:

double[][] myArr = Enumerable.Repeat(new double[colCount], rowCount).ToArray();
Run Code Online (Sandbox Code Playgroud)

问题是它似乎正在创建一个单独的double[colCount]并为每行分配一个新数组的intsead分配引用.有没有办法做到这一点,而不是太神秘?

c# linq arrays initialization jagged-arrays

9
推荐指数
1
解决办法
3298
查看次数

Java Jagged Array

我们的作业分配要求我们使用锯齿状数组来存储二维布尔矩阵的值.是否有针对锯齿状数组的内置java类,或者我将不得不使用ArrayLists数组手动创建它?

java jagged-arrays

9
推荐指数
1
解决办法
8608
查看次数

多维数组、可为 null 的引用类型和类型转换

使用 C# 8 的可空引用类型,我们可以编写(对于引用类型):

T x = ...;
T? y = x;
Run Code Online (Sandbox Code Playgroud)

但是,我无法理解多维和锯齿状数组的转换规则。

string[][] a = new string[1][];
string?[]?[] b = new string[1][];
string?[]?[]? c = new string[1][];
string?[,][] d = new string[1,2][];
string?[,][]? e = new string[1,2][];
string?[,]?[] f = new string[1,2][];   // compiler error
Run Code Online (Sandbox Code Playgroud)

最后一个例子给了我

错误 CS0029:无法将类型 'string[ , ][]' 隐式转换为 'string?[ , ]?[]'

既然它适用于锯齿状数组(请参阅 参考资料b),为什么它不适用于多维数组呢?

R# 还告诉我

'c' 可以声明为不可空

string?[]?[]? c = new string[1][];
//          ^ redundant
Run Code Online (Sandbox Code Playgroud)

我知道编译器可以证明它c本身不为空,但我很困惑第三个?是多余的。鉴于锯齿状数组是从左到右创建的(即new int[2][]而不是 …

c# jagged-arrays multidimensional-array nullable-reference-types

9
推荐指数
1
解决办法
306
查看次数

将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
查看次数