0

リストがあります。

ここで、Tはクラスであり、intやその他のパラメーターなどのプロパティがあります。

例えば

  ID Name

  1  Apple
  2  Banana
  3  Test

今、私は順序を指定する別のリストを持っています

Like 2,1,3

だから私はバナナ、アップルのように2,1,3を使用してそれらを並べ替えてからテストしたい

どうすればこのwihhIComaparerを実装できますか

現在私はこれを試しましたが失敗しました

 test = test.OrderBy(p=>  SortableIntList.Contains(p.ID));
4

2 に答える 2

3

すばやく機能させるには、

test = test
    .Where(p => SortableIntList.Contains(p.ID))
    .OrderBy(p => SortableIntList.IndexOf(p.ID));

より効率的にするために、ソート順を辞書(ID =>位置)に保存してから、次のように呼び出すことができます。

var SortableIntDictionary = SortableIntList
    .Select((ID, Index) => new { ID, Index })
    .ToDictionary(p => p.ID, p => p.Index);
test = test
    .Where(p => SortableIntDictionary.ContainsKey(p.ID))
    .OrderBy(p => SortableIntDictionary[p.ID]);
于 2012-12-20T09:39:54.477 に答える
2

これを試してみてください、比較器は必要ありません

 // Setup test data
 var orderList = new List<int> { 2, 1, 3 };

 var stuffList = new List<Stuff> { 
            new Stuff { Id = 1, Name = "Apple" },
            new Stuff { Id = 2, Name = "Banana" },
            new Stuff { Id = 3, Name = "Test" }
        };

 // Do sort according to list
 var result = orderList.Select(idx => stuffList.Where(s => s.Id == idx));

編集:IDルックアップを作成する方が速い場合があります:

var stuffDictionary = stuffList.ToDictionary(s => s.ID, s => s);
var result = orderList.Where(idx => stuffDictionary.ContainsKey(idx))
                      .Select(idx => stuffDictionary[idx]);
于 2012-12-20T09:44:37.280 に答える