C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

■97950 / 3階層)  多次元配列の順序を入れ替える
□投稿者/ WebSurfer (2323回)-(2021/08/11(Wed) 13:53:41)
No97948 (鬼太郎 さん) に返信

> 見た目的に
> Z Y X
> と並んでいたよりも
> X Y Z
> と並んでいた方がコードが見やすいので
> 
> 2次元配列のメモリー内での格納順を変えられるのなら
> その方法が知りたいのですが。
> そのような方法はございませんでしょうか?

新たに順序を変えて作り直す以外に方法はないと思います・・・が、そもそもそんな
ことをする必要は 100% あり得ないと思いますけど。単純に配列にアクセスして操作
する順番を変えれば済む話です。

以下のコードで試してみましたが、

using System;

namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
            byte[,,] cube = {
                {  { 0,  1,  2},  { 3,  4,  5}, { 6,  7,  8} },
                {  { 9, 10, 11},  {12, 13, 14}, {15, 16, 17} },
                {  {18, 19, 20},  {21, 22, 23}, {24, 25, 26} }
            };

            for (int i = 0; i < cube.GetLength(0); i++)
            {
                for (int j = 0; j < cube.GetLength(1); j++)
                {
                    for (int k = 0; k < cube.GetLength(2); k++)
                    {
                        Console.Write($"{cube[i,j,k]} ");
                    }
                }
            }

            Console.WriteLine("\n-----------");

            foreach (byte i in cube)
            {
                Console.Write($"{i} ");
            }
        }
    }
}

C# の多元配列のメモリ上で各要素の配置は上のコードの 1, 2, 3 ... 26 の順番になる
ようです。

以下の画像を見てください。(Visual Studio のデバッグ画面にスクリーンショットです。
クリックすると表示されます)

http://surferonwww.info/BlogEngine/image.axd?picture=2021%2f8%2f0811array.jpg

なので、上のコードの for ループ、foreach ループの順序でアクセスすれば、メモリに
並んでいる順序でアクセスできるはずです。ちなみに、実行結果は:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
-----------
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←Re[2]: 多次元配列の順序を入れ替える /鬼太郎 →Re[4]: 多次元配列の順序を入れ替える /鬼太郎
 
上記関連ツリー

多次元配列の順序を入れ替える / 鬼太郎 (21/08/10(Tue) 23:24) #97945
Re[1]: 多次元配列の順序を入れ替える / WebSurfer (21/08/11(Wed) 10:09) #97946
│└ Re[2]: 多次元配列の順序を入れ替える / 鬼太郎 (21/08/11(Wed) 11:09) #97948
(削除) / (21/09/17(Fri) 10:39) #98109
    ├ Re[3]: 多次元配列の順序を入れ替える / ニケ (21/08/11(Wed) 13:38) #97949
    └ 多次元配列の順序を入れ替える / WebSurfer (21/08/11(Wed) 13:53) #97950 ←Now
      └ Re[4]: 多次元配列の順序を入れ替える / 鬼太郎 (21/08/11(Wed) 19:17) #97951
        ├ Re[5]: 多次元配列の順序を入れ替える / WebSurfer (21/08/11(Wed) 19:48) #97952
        ├ Re[5]: 多次元配列の順序を入れ替える / Hongliang (21/08/11(Wed) 20:52) #97954
        ├ Re[5]: 多次元配列の順序を入れ替える / 古谷 (21/08/11(Wed) 20:35) #97953
        └ Re[5]: 多次元配列の順序を入れ替える / WebSurfer (21/08/11(Wed) 21:14) #97955
          └ Re[6]: 多次元配列の順序を入れ替える / ニケ (21/08/13(Fri) 08:33) #97960

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信