Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.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#中对3D数组进行排序,如果是1D数组,则每行特定于一个条目?_C# - Fatal编程技术网

如何在c#中对3D数组进行排序,如果是1D数组,则每行特定于一个条目?

如何在c#中对3D数组进行排序,如果是1D数组,则每行特定于一个条目?,c#,C#,请指导我如何在考虑到每一行特定于一个特定列值的情况下对数组进行排序。比如说, 1D阵列 5 3 四, 二维阵列 1,2,3 3,4,5 6,7,8 在上面的示例中,假设5(在1Darray中)与2d数组(1,2,3)的第一行相关联。类似地,1d数组中的3与2d数组的第二行(3,4,5)相关联。同样,与4的第三个条目(1d数组)相关联。现在我想对1D数组进行排序,考虑到与每个1D数组元素相关联的行也会相应地改变。我的意思是,它是一种随着列值的变化而自动排列行的方式。请不要为复杂的事情操心,只需将1

请指导我如何在考虑到每一行特定于一个特定列值的情况下对数组进行排序。比如说,

1D阵列
5
3
四,

二维阵列
1,2,3
3,4,5
6,7,8


在上面的示例中,假设5(在1Darray中)与2d数组(1,2,3)的第一行相关联。类似地,1d数组中的3与2d数组的第二行(3,4,5)相关联。同样,与4的第三个条目(1d数组)相关联。现在我想对1D数组进行排序,考虑到与每个1D数组元素相关联的行也会相应地改变。我的意思是,它是一种随着列值的变化而自动排列行的方式。请不要为复杂的事情操心,只需将1D数组的每个sortex索引映射到正确的行即可

您基本上保留了两个数组,但没有对它们进行有效排序,并且将排序后的索引存储在另一个int数组中。对于您的示例,您将有第三个数组

[1,2,0]

其中第一个位置映射到一维和二维数组的第二行,这也是较小的元素。。依此类推。

不用担心复杂的事情,只需将1D数组的每个sortex索引映射到正确的行即可

您基本上保留了两个数组,但没有对它们进行有效排序,并且将排序后的索引存储在另一个int数组中。对于您的示例,您将有第三个数组

[1,2,0]

其中第一个位置映射到一维和二维数组的第二行,这也是较小的元素。。等等。

一个想法。有一个数组,其源数组的位置与两者匹配。让我解释一下:

假设你有一个数组1D

var oneDArray = new int[]; //fill it.. :)
    var twoDArray = new int[,]; //fill it.. :)
    var mapping = new int[oneDArray.Length];

    //lets create the mapping
    for (int i = 0; i < mapping.Lenght; i++)
      mapping[i] = i;

    //now lets sort the 1D array
    for (int i = 0; i < oneDArray.Length; i++)
      for (int j = i; j < oneDArray.Length; i++){

        if ( oneDArray[i] < oneDArray[j] ){
            Swap(oneDArray, i, j);
            Swap(mapping, i, j);
        }
    }
var oneDArray=newint[]//把它填满……)
var twoDArray=新整数[,]//把它填满……)
var-mapping=newint[oneDArray.Length];
//让我们创建映射
对于(int i=0;i
swap方法接收一个数组和两个值i和j,并将i-eth值与数组的j-eth值交换。如果交换映射,则可以看到3D数组的对应值在哪里。因此,映射[i]将具有与1D的i-eth数对应的向量在2D上的位置

我希望我没有把事情搞得一团糟。。。
致以最良好的祝愿

一个想法。有一个数组,其源数组的位置与两者匹配。让我解释一下:

假设你有一个数组1D

var oneDArray = new int[]; //fill it.. :)
    var twoDArray = new int[,]; //fill it.. :)
    var mapping = new int[oneDArray.Length];

    //lets create the mapping
    for (int i = 0; i < mapping.Lenght; i++)
      mapping[i] = i;

    //now lets sort the 1D array
    for (int i = 0; i < oneDArray.Length; i++)
      for (int j = i; j < oneDArray.Length; i++){

        if ( oneDArray[i] < oneDArray[j] ){
            Swap(oneDArray, i, j);
            Swap(mapping, i, j);
        }
    }
var oneDArray=newint[]//把它填满……)
var twoDArray=新整数[,]//把它填满……)
var-mapping=newint[oneDArray.Length];
//让我们创建映射
对于(int i=0;i
swap方法接收一个数组和两个值i和j,并将i-eth值与数组的j-eth值交换。如果交换映射,则可以看到3D数组的对应值在哪里。因此,映射[i]将具有与1D的i-eth数对应的向量在2D上的位置

我希望我没有把事情搞得一团糟。。。
致以最良好的祝愿

实际上,我需要在运行时获取数组值。它不是预设值数组!当然,我说的是运行时,你从一个数组开始,它将每个索引映射到相应的行
[1,2,3,…]
,然后通过比较1D对它进行排序,最后你可以使用它来引用1D数组或2D数组。我的答案与你的答案非常相似,杰克,对不起,我没有把你的读到底。谢谢杰克,我明白你的意思了。这真的很有帮助+1:不仅仅是因为我们有共同的想法……)因为它毕竟是最优雅的解决方案。实际上,我需要在运行时获取数组值。它不是预设值数组!当然,我说的是运行时,你从一个数组开始,它将每个索引映射到相应的行
[1,2,3,…]
,然后通过比较1D对它进行排序,最后你可以使用它来引用1D数组或2D数组。我的答案与你的答案非常相似,杰克,对不起,我没有把你的读到底。谢谢杰克,我明白你的意思了。这真的很有帮助+1:不仅仅是因为我们有共同的想法……)因为这毕竟是最优雅的解决方案。大卫,你就是那个男孩。非常感谢你的工作。谢谢,大卫,你就是那个男孩。非常感谢你的工作。谢谢