おもちゃラボ

Unityで遊びを作ってます

【Unity】Listの内容をDebug.Logで表示する

UnityでListの内容を表示するため、次のように書いたとしましょう。

List<string> names = new List<string>(){"おそ松", "トド松", "カラ松", "チョロ松", "一松", "十四松"};
Debug.Log(names);

本当は全員分の名前が表示されてほしいのですが、残念ながら次のように「List自体」の情報が表示されてしまいます。

f:id:nn_hokuson:20210824193906p:plain:w500

foreachを使う(けど不便)

そこで普通は次のようにforeachで1つずつ表示するのですが、プログラムが長くなったり、表示が改行されたりして不便ですねー

List<string> names = new List<string>(){"おそ松", "トド松", "カラ松", "チョロ松", "一松", "十四松"};

foreach(string name in names)
{
      Debug.Log(name);
}    

結果は次のようになります。
f:id:nn_hokuson:20210824194612p:plain:w250

Joinメソッドを使う

そこで、Listの内容を表示するためJoinメソッドを使ってみます。Joinメソッドを使うことで、次のようにスッキリ書けます。

List<string> names = new List<string>(){"おそ松", "トド松", "カラ松", "チョロ松", "一松", "十四松"};

Debug.Log(string.Join(",", names)); 

stringクラスにはstaticメソッドとしてJoinメソッドが用意されています。Joinメソッドは第2引数に渡した文字列のListを連結して一つの文字列にするメソッドです。連結する各要素の間には第1引数の文字列が挿入されます。

コンソールウインドウには次のように表示されます。バッチリですね!
f:id:nn_hokuson:20210824195218p:plain:w500

文字列以外のListについて

Joinメソッドの第2引数にはstring型のListを渡す必要があるので、残念ながらint型のListなどをそのまま渡すことはできません。この場合は次のように書きます。

List<int> nums = new List<int>(){1, 2, 3, 4, 5};

Debug.Log(string.Join(",", nums.Select(n => n.ToString())));    

まず、LinqのSelectメソッドを使ってそれぞれの要素を取り出します。次に各要素に対してToStringメソッドを使って文字列のリストに変換しています。Linqのメソッドを使うため「using System.Linq」が必要になります。

結果は次のような表示になりました。
f:id:nn_hokuson:20210824200700p:plain:w300

まとめ

Listの内容をDebug.Logで表示したいときにはJoinメソッドとSelectメソッドを組み合わせると便利!

Linqの各メソッドについては「確かな力が身につくC#超入門」でも解説しているので、あわせてどうぞ〜