UnityでListの内容を表示するため、次のように書いたとしましょう。
List<string> names = new List<string>(){"おそ松", "トド松", "カラ松", "チョロ松", "一松", "十四松"}; Debug.Log(names);
本当は全員分の名前が表示されてほしいのですが、残念ながら次のように「List自体」の情報が表示されてしまいます。
foreachを使う(けど不便)
そこで普通は次のようにforeachで1つずつ表示するのですが、プログラムが長くなったり、表示が改行されたりして不便ですねー
List<string> names = new List<string>(){"おそ松", "トド松", "カラ松", "チョロ松", "一松", "十四松"}; foreach(string name in names) { Debug.Log(name); }
結果は次のようになります。
Joinメソッドを使う
そこで、Listの内容を表示するためJoinメソッドを使ってみます。Joinメソッドを使うことで、次のようにスッキリ書けます。
List<string> names = new List<string>(){"おそ松", "トド松", "カラ松", "チョロ松", "一松", "十四松"}; Debug.Log(string.Join(",", names));
stringクラスにはstaticメソッドとしてJoinメソッドが用意されています。Joinメソッドは第2引数に渡した文字列のListを連結して一つの文字列にするメソッドです。連結する各要素の間には第1引数の文字列が挿入されます。
コンソールウインドウには次のように表示されます。バッチリですね!
文字列以外の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」が必要になります。
結果は次のような表示になりました。
まとめ
Listの内容をDebug.Logで表示したいときにはJoinメソッドとSelectメソッドを組み合わせると便利!
Linqの各メソッドについては「確かな力が身につくC#超入門」でも解説しているので、あわせてどうぞ〜