
List<string> や List<int> は結構記事を見かけるのですが、クラスにたいしては意外と少ないので例をあげておきます。
(といっても、それほど特別なことをする必要はありません)
データサンプル

public class Row
{
public int ID;
public string Name;
}
List<Row> rows = new List<Row>();
rows.Add( new Row() { ID = 1, Name = "01_01" });
rows.Add( new Row() { ID = 2, Name = "01_01" });
rows.Add( new Row() { ID = 3, Name = "01_01" });
rows.Add( new Row() { ID = 4, Name = "01_01" });
rows.Add( new Row() { ID = 5, Name = "01_01" });
rows.Add( new Row() { ID = 6, Name = "01_01" });
rows.Add( new Row() { ID = 7, Name = "01_01" });
rows.Add( new Row() { ID = 8, Name = "01_02" });
rows.Add( new Row() { ID = 9, Name = "01_03" });
rows.Add( new Row() { ID = 10, Name = "01_03" });
rows.Add( new Row() { ID = 11, Name = "01_03" });
データを抽出する
01_01、01_02、01_03 だけ取得したいのですが、01_01 と 01_03 はデータが重複しているので、一件だけ抽出したい。
こういった場合、HashSet を使うと便利です。
HashSet は重複しないよう、キー値を保存することができます。
var names = new HashSet<string>();
rows.ForEach( e => names.Add(e.Name) );
foreach (var name in names)
{
UnityEngine.Debug.Log(name); // unity
System.Diagnostics.Debug.WriteLine(name); // C#
}

グループごとの行データも確認したい場合
グループごとにデータを分け、後で1行1行取り出す必要があればこちら。
表示確認のコードが長いですが、実際の処理は1行で済みます。
抽出にくらべて負荷が高いので、乱用は控えましょう。
var groupRows = rows.GroupBy(e => e.Name).Select(e => e).ToList();
foreach (var groupRow in groupRows)
{
// グループ
Debug.Log(groupRow.Key);
foreach (var row in groupRow)
{
// グループごとのデータ
Debug.Log($"{groupRow.Key}: {row.ID}");
}
}





