4

私はc#を初めて使用し、リスト内の要素の長さでリストを並べ替えている問題について少し助けを求めています。簡略化されたバージョンを使用して説明しようと思います。

次の形式のリストのカテゴリのオブジェクトリストがあります。

category.Name;
category.Path;

外部データベースからカテゴリのリストを抽出してリストにインポートすると、次のように特定の順序で表示されません。

Luxury Seats      /Base/Seats
Small Seats       /Base/Seats/Luxury Seats
Seats             /Base
Small Gloves      /Base/Gloves
Large Seats       /Base/Seats/Luxury Seats
Small Red Gloves  /Base/Gloves/Small Gloves
Gloves            /Base
Budget Seats      /Base/Seats/Luxury Seats/Small Seats

上記から、それらが特定の順序ではなく、データベース内の順序に従うだけであることがわかります。私がやろうとしているのは、Path要素の名前とpath要素の構成要素の長さの両方を使用してそれらを整理することです。リストを再編成して、次の形式を実現する必要があります。

座席/ベース
ラグジュアリーシート/ベース/シート
スモールシート/ベース/シート/ラグジュアリーシート
バジェットシート/ベース/シート/ラグジュアリーシート/スモールシート
ラージシート/ベース/シート/ラグジュアリーシート
手袋/ベース
小さな手袋/ベース/手袋
小さな赤い手袋/ベース/手袋/小さな手袋

したがって、リストは、パスコンポーネント要素の深さとカテゴリ名に基づいて階層に構造化されます。

誰かが私を助けることができれば、それは本当に素晴らしいことです。

4

1 に答える 1

2

仮定:

var list = new List<Category>();

2つのオプションしかありません。

var result = list.OrderBy(c => c.Name) // Luxury Seats; Seates (L -> S)
                 .ThenBy(c => c.Path); // /Base; /Base/Seats (shorter -> longer)

またはその逆:

var result = list.OrderBy(c => c.Path) // /Base; /Base/Seats
                 .ThenBy(c => c.Name); // Luxury Seats; Seates

また、パスの深さで注文することもできます。

var result = list.OrderBy(c => c.Path.Split(new[] { '\' }).Length) // less slashes -> more slashes
                 .ThenBy(c => ...);
于 2012-09-14T16:16:56.687 に答える