バッテラが如く

プログラミングしましょ!

【Unity】string.Joinで配列の中身をDebug.Logで出力する方法

※この記事の情報は次のバージョンで動作確認しています。

  • MacOS Monterey (12.1) Unity (2021.3.2f1)
  • Debug.Log(配列)だとうまくいかない

    例えば以下のように配列を直接Debug.Logで出力しようとしたとします。

    string[] ary = new string[] { "すぱいく", "ほわいと", "りんだ", "てんしん" };
    Debug.Log(ary);
    

    これをコンソールで確認すると中身ではなく配列のデータ型名が表示されます。

    欲しいのは配列の中身ですよね? これをどうするかという話です。

    string.Joinを使おう

    第1引数には 区切る時に使う文字を指定します。 ,(カンマ) や\r(改行文字)などを使うのが一般的ですね。

    第2引数には 配列変数を指定します。

    上記を踏まえて先ほどのコードを直します。

    string[] ary = new string[] { "すぱいく", "ほわいと", "りんだ", "てんしん" };
    Debug.Log(string.Join(",",ary));
    

    そしてこれを実行すると・・・

    いい感じに表示されました!

    2次元配列にはSystem.LinqのCastを使おう

    string.Joinでも2次元配列だとうまくいきません。

    string[,] ary2 = new string[,]
    {
                {"1","すぱいく" }, {"2","ほわいと" }, {"3","りんだ" }, {"4","てんしん" }
    };
    Debug.Log(string.Join(",", ary2.Cast<string>()));
    

    2次元配列には System.LinqのCast を使うと1次元配列に変換できます。これなら正しくログが表示されます。

    using System.Linq;
    
    ~~~~~~~省略~~~~~~~~
    
    string[,] ary2 = new string[,]
    {
                {"1","すぱいく" }, {"2","ほわいと" }, {"3","りんだ" }, {"4","てんしん" }
    };
    Debug.Log(string.Join(",", ary2.Cast<string>()));