Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从矩阵中获取一维数组_C#_Arrays_Matrix - Fatal编程技术网

C# 如何从矩阵中获取一维数组

C# 如何从矩阵中获取一维数组,c#,arrays,matrix,C#,Arrays,Matrix,我有一个矩阵。我需要从矩阵中得到一维数组。例如,我有如下矩阵: 123 456 789 所以它看起来像3个数组:147258369。 但我在代码中得到了“索引超出范围异常”: int[] b = new int[n]; for (i = 0; i < n; i++) { b[i] = a[i, n]; Console.Write(b[i] + " "); } Console.

我有一个矩阵。我需要从矩阵中得到一维数组。例如,我有如下矩阵:
123
456
789
所以它看起来像3个数组:147258369。 但我在代码中得到了“索引超出范围异常”:

  int[] b = new int[n];
        for (i = 0; i < n; i++)
        {
            b[i] = a[i, n];
            Console.Write(b[i] + " ");
        }
        Console.WriteLine();
int[]b=新的int[n];
对于(i=0;i
谢谢你的帮助

以下是已经生效的完整代码:

static void Main(string[] args)
    {        
        int n = 0, m = 0, i = 0, j = 0;           

        Random r = new Random();

        Console.WriteLine("Please, input matrix size:");
        Console.Write("\tn = ");

        n = Convert.ToInt32(Console.ReadLine());
        Console.Write("\tm = ");

        m = Convert.ToInt32(Console.ReadLine());
        Console.WriteLine();

        int[,] a = new int[n, m];           

        for (i = 0; i < n; i++)
        {
            for (j = 0; j < m; j++)
            {                  
                a[i, j] = r.Next(0, 2);                   
            }                
        }

        showMe(a, n, m);

        Console.WriteLine();
        run(a, n, m);

        Console.ReadKey();

        int[][] b = new int[m][];
        for (i = 0; i < m; i++) 
        { 
            b[i] = new int[n]; 
            for (j = 0; j < n; j++) 
            {
                b[i][j] = a[j, i];
                Console.Write(b[i][j] + " ");
            }
            Console.WriteLine();
        }
        Console.WriteLine();
        Console.ReadKey();
    }
static void Main(字符串[]args)
{        
int n=0,m=0,i=0,j=0;
随机r=新随机();
Console.WriteLine(“请输入矩阵大小:”);
Console.Write(“\tn=”);
n=Convert.ToInt32(Console.ReadLine());
Console.Write(“\tm=”);
m=Convert.ToInt32(Console.ReadLine());
Console.WriteLine();
int[,]a=新的int[n,m];
对于(i=0;i
我假设n=3,它是一个平方矩阵,
a[I,n]将超出a的范围-您可以引用的最大索引为n-1

我想你想要的是

    int[][] b = new int[m][];
    for (i = 0; i < m; i++)
    {
        b[i] = new int[n];
        for (j = 0; j < n; j++)
        {
            b[i][j] = a[j,i];
        }

    }
int[]b=新的int[m][];
对于(i=0;i

b[0]是第一个数组,b[1]是第二个数组……

我假设n=3,它是一个方阵,
a[I,n]将超出a的范围-您可以引用的最大索引为n-1

我想你想要的是

    int[][] b = new int[m][];
    for (i = 0; i < m; i++)
    {
        b[i] = new int[n];
        for (j = 0; j < n; j++)
        {
            b[i][j] = a[j,i];
        }

    }
int[]b=新的int[m][];
对于(i=0;i
b[0]是您的第一个数组,b[1]是您的第二个数组……

尝试以下操作:

        int n = 3;
        int[,] a = new int[,] { 
            { 1, 2, 3 }, 
            { 4, 5, 6 }, 
            { 7, 8, 9 } };

        int[] b = new int[n];
        for (int i = 0; i < n; i++)
        {
            b[i] = a[i, n - 1];
            Console.Write(b[i] + " ");
        }
        Console.ReadLine();
int n=3;
int[,]a=新的int[,]{
{ 1, 2, 3 }, 
{ 4, 5, 6 }, 
{ 7, 8, 9 } };
int[]b=新的int[n];
对于(int i=0;i
这将输出3 6 9,因为n没有改变。Jimmy是对的,a[i,n]必须是[i,n-1]。

试试这个:

        int n = 3;
        int[,] a = new int[,] { 
            { 1, 2, 3 }, 
            { 4, 5, 6 }, 
            { 7, 8, 9 } };

        int[] b = new int[n];
        for (int i = 0; i < n; i++)
        {
            b[i] = a[i, n - 1];
            Console.Write(b[i] + " ");
        }
        Console.ReadLine();
int n=3;
int[,]a=新的int[,]{
{ 1, 2, 3 }, 
{ 4, 5, 6 }, 
{ 7, 8, 9 } };
int[]b=新的int[n];
对于(int i=0;i

这将输出3 6 9,因为n没有改变。Jimmy是正确的,a[i,n]必须是a[i,n-1]。

这通常适用于二维数组

public static T[][] ToJaggedArray<T>(this T[,] arr)
{
    return Enumerable.Range(0, arr.GetUpperBound(0) + 1)
                     .Select(i => Enumerable.Range(0, arr.GetUpperBound(1) + 1)
                                            .Select(j => arr[i, j])
                                            .ToArray())
                     .ToArray();
}

public static T[][] ToJaggedArrayTranspose<T>(this T[,] arr)
{
    return Enumerable.Range(0, arr.GetUpperBound(1) + 1)
                     .Select(j => Enumerable.Range(0, arr.GetUpperBound(0) + 1)
                                            .Select(i => arr[i, j])
                                            .ToArray())
                     .ToArray();
}

// you'd be interested in ToJaggedArrayTranspose()
var mat = new[,]
{
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9},
};
var arr = mat.ToJaggedArrayTranspose();
// arr === new[][] { new[] {1, 4, 7}, new[] {2, 5, 8}, new[] {3, 6, 9} }
publicstatict[]ToJaggedArray(此T[,]arr)
{
返回可枚举的范围(0,arr.GetUpperBound(0)+1)
.Select(i=>Enumerable.Range(0,arr.GetUpperBound(1)+1)
.选择(j=>arr[i,j])
.ToArray())
.ToArray();
}
公共静态T[]Tojaggedarray转置(此T[,]arr)
{
返回可枚举的范围(0,arr.GetUpperBound(1)+1)
.Select(j=>Enumerable.Range(0,arr.GetUpperBound(0)+1)
.选择(i=>arr[i,j])
.ToArray())
.ToArray();
}
//你会对ToJaggedArrayTranspose()感兴趣
var mat=新[,]
{
{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
};
var arr=mat.ToJaggedArrayTranspose();
//arr===new[]{new[]{1,4,7},new[]{2,5,8},new[]{3,6,9}

p、 在美国,总是在多维数组上使用
GetUpperBound()
来获取维度的长度,不要试图猜测它。

这通常适用于二维数组

public static T[][] ToJaggedArray<T>(this T[,] arr)
{
    return Enumerable.Range(0, arr.GetUpperBound(0) + 1)
                     .Select(i => Enumerable.Range(0, arr.GetUpperBound(1) + 1)
                                            .Select(j => arr[i, j])
                                            .ToArray())
                     .ToArray();
}

public static T[][] ToJaggedArrayTranspose<T>(this T[,] arr)
{
    return Enumerable.Range(0, arr.GetUpperBound(1) + 1)
                     .Select(j => Enumerable.Range(0, arr.GetUpperBound(0) + 1)
                                            .Select(i => arr[i, j])
                                            .ToArray())
                     .ToArray();
}

// you'd be interested in ToJaggedArrayTranspose()
var mat = new[,]
{
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9},
};
var arr = mat.ToJaggedArrayTranspose();
// arr === new[][] { new[] {1, 4, 7}, new[] {2, 5, 8}, new[] {3, 6, 9} }
publicstatict[]ToJaggedArray(此T[,]arr)
{
返回可枚举的范围(0,arr.GetUpperBound(0)+1)
.Select(i=>Enumerable.Range(0,arr.GetUpperBound(1)+1)
.选择(j=>arr[i,j])
.ToArray())
.ToArray();
}
公共静态T[]Tojaggedarray转置(此T[,]arr)
{
返回可枚举的范围(0,arr.GetUpperBound(1)+1)
.Select(j=>Enumerable.Range(0,arr.GetUpperBound(0)+1)
.选择(i=>arr[i,j])
.ToArray())
.ToArray();
}
//你会对ToJaggedArrayTranspose()感兴趣
var mat=新[,]
{
{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
};
var arr=mat.ToJaggedArrayTranspose();
//arr===new[]{new[]{1,4,7},new[]{2,5,8},new[]{3,6,9}

p、 在美国,总是在多维数组上使用
GetUpperBound()
来获取维度的长度,不要试图猜测它。

您能确认
a
的第一个维度的大小是
n
?在这个例子中,看看
a
n
的定义会很有帮助。你的意思是147、258和369吗?哦,真的。。。塔克斯。我会改正的。你能确认一下第一个数字吗