我有一个表示用户的类数组和另一个表示固定项(当前仅为用户ID)的类array.以下是课程:

public class User
{
    public int UserId { get; set; }
    public bool Pinned { get; set; }

    public User(int userId, bool pinned)
    {
        UserId = userId;
        Pinned = pinned;
    }
}

public class PinnedItem
{
    public int UserId { get; set; }

    public PinnedItem(int userId)
    {
        UserId = userId;
    }
}

固定用户的所有用户ID都以特定的顺序(固定项目的顺序)保存,我想对用户数组进行排序,以便固定用户位于顶部,而这些固定用户遵循固定项目数组的顺序.例如,如果我有一组用户,如:

var users = new []{ new User(1, true), new User(2, false), new User(3, true) }

以及如下所示的固定项目数组:

var pinnedItems = new [] { new PinnedItem(3), new PinnedItem(1) }

然后,我希望生成的数组如下所示:

[ {3, true}, {1, true}, {2, false} ]

如果固定项目的数组没有任何顺序,我也需要它工作.因此,如果我有这个用户数组:

var users = new []{ new User(1, false), new User(2, true), new User(3, true), new User(4, true) }

以及此固定项目数组:

var pinnedItems = new [] { new PinnedItem(3), new PinnedItem(2), new PinnedItem(4) }

在这种情况下,我希望生成的数组如下所示:

[ {3, true}, {2, true}, {4, true}, {1, false} ]

我们将非常感谢您的任何帮助.此外,如果问题中有任何不清楚的地方,我很抱歉,如果需要,我将对其进行相应的编辑.

推荐答案

我确信有很多方法可以做到这一点,我还有很多LINQ需要学习,但以下应该让你开始学习;

// First, get the users that are mentioned by a PinnedItem 
var pinnedUsers = pinnedItems.Select(x => users.FirstOrDefault(y => y.UserId == x.UserId));
// Get all the users that are not mentioned in a PinnedItem
var unpinnedUsers = users.Except(pinnedUsers);
// Combine both
var both = pinnedUsers.Concat(unpinnedUsers);

Csharp相关问答推荐

在实际上是List T的 IESEARCH上多次调用First()是否不好?

注册通用工厂的C# Dep注入

System. InvalidOperationException:无法将数据库中的字符串值i转换为映射的ItemType枚举中的任何值''''

迭代C#List并在数据库中 for each 元素执行SELECT语句—更有效的方式?

如何从HttpContext获取请求正文

==和Tuple对象的相等<>

如何在C#中将对象[*,*]直接转换为字符串[*,*]?

C#XmlSerializer-输出控制新行的多个XML片段

如何在Windows 11任务调度程序中每1分钟重复一次任务?

WeakReference未被垃圾收集

如何将ASP.NET Core 2.1(在.NET框架上运行)更新到较新的版本?

SortedSet.Remove()不会删除SortedSet.Min返回的元素

在EF Core中,有没有什么方法可以防止在查询中写入相同的条件,而代之以表达式?

Blazor Fluent UI DialogService,<;FluentDialogProvider/>;错误

类/值和日期的泛型方法

我是否应该注销全局异常处理程序

Xamarin.Forms项目中缺少MainPage.xaml

获取应用程序版本信息时出现奇怪信息

客户端/服务器RPC如何处理全局变量?

无法创建工具窗口(用于VBIDE、VBA的COM加载项扩展)