たとえば、string[] Genres
プロパティを持つTrack
クラスがあります。要素を配列でグループ化する/コレクション<T>
Track
を効率的にグループ化し、必要に応じて1つのエントリを複数のグループの一部にすることはできますか?たとえば、次の収集のために:
A - Rock
B - Pop, Rock
C - Rock, Soundtrack
D - Pop, Soundtrack
これがあるべきに対する結果:
Rock - A, B, C
Pop - B, D
Soundtrack - C, D
は、LINQを使用していることを行うための簡単な方法はありますか?または、LINQ alltogetherを使用するより効率的な方法がありますか?
ありがとうございます!トラックの名前やジャンル - - ジャンルの一つ当初、我々は2つのプロパティトラックと匿名オブジェクトの配列を、SelectMany
方法を使用して私たちのコレクションを平ら
var genresTracks = tracks.SelectMany(track => track.Genres, (track, genre) => new
{
// you might want to correct the Name property
// with the correct one.
Track = track.Name,
Genre = genre
})
.GroupBy(tg => tg.Genre)
.Select(gr => new
{
Genre = gr.Key,
Tracks = gr.Select(x=>x.Track)
});
foreach(var genreTracks in genresTracks)
{
var tracksCsv = string.Join(",", genreTracks.Tracks);
Console.WriteLine($"{genreTracks.Genre} - {tracksCsv}");
}
:
興味深いアプローチです。ありがとう! – Reynevan
XAMLバインディングに合わせるためにコードにいくつかの変更を加えました。まず、最後の '.Select()'クエリを削除しました。 '.GroupBy()'クエリを '.GroupBy(tg => tg.Genre、tg => tg.Track);に変更しました。このようにして、LINQクエリ全体の結果として、IEnumerable>を取得します。 –
Reynevan
@Reynevanいいね!どういたしまして ! – Christos