0

同じタイプのオブジェクトのリストが 2 つあります。

1 つのリストはシステム管理者から提供され、もう 1 つはページを閲覧しているユーザーから提供されます。

これらのリストは、ある時点で表示するためにマージする必要がpositionあり、リストがソートされる値に競合する値が含まれる可能性があります。

2 つのリストをマージし、位置に同じ値が見つかった場合に、より低い (したがってより良い) スポットを管理者リストに与える方法はありますか?

class info
{
  int position;
  string title;
}

List<info> adminInfo = new List<info> 
{
  new info() {position = 0, title = "adminOne"}
  new info() {position = 4, title = "adminThree"}
  new info() {position = 3, title = "adminTwo"}
}

List<info> userInfo = new List<info> 
{
  new info() {position = 0, title = "userOne"}
  new info() {position = 3, title = "userTwo"}
}

List<info> PreferentiallySortedList(List<info> adminList, List<info> userList)
{
  //Some kind of magic here
}

//Looping through PreferentiallySortedList and displaying 
//the title of each item should return the following:

"adminOne"
"userOne"
"adminTwo"
"userTwo"
"adminThree"
4

2 に答える 2

1

(コード的に) 最も簡単な方法は、Union で LINQ を使用し、優先度とinfo.

このようなもの(構文エラーがある可能性があります)

return adminList
   .Select(info => new {Priority = 0, Info = info})
   .Union(userList.Select(info => new {Priority = 1, Info = info}))
   .SortBy(u => u.Info.position)
   .ThenBy(u => u.Priority)
   .Select(u => u.Info)
   .ToList();
于 2013-01-17T06:49:35.793 に答える
0

それぞれinfoがリストの 1 つだけに発生する場合は、無名オブジェクトを使用しないで実行できます。結合リスト、 順position、次に要素が に含まれているかどうか順adminList:

List<info> PreferentiallySortedList(List<info> adminList, List<info> userList)
{
    return adminList.Union(userList)
                    .OrderBy(u => u.position)
                    .ThenBy(u => !adminList.Contains(u))
                    .ToList();
}

リストのサイズによっては、パフォーマンスの考慮が必要になる場合があります。

于 2013-01-17T06:39:49.057 に答える