You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#如何将指定条件对象移至List顶部?求更优实现方案

优化方案:单遍历将指定元素移至列表顶部

你的现有实现会通过两次Where查询遍历列表两次,这里提供两种更高效的单遍历优化方案:

方案1:一次遍历分组处理

通过一次遍历把元素分成匹配组和非匹配组,再合并结果,避免重复遍历:

List<AppointmentDTO> res = await this.appointmentService.GetCanReserve(coachId, date);

var id = HttpContext.User.FindFirst("id")?.Value;
if (id is not null)
{
    var matches = new List<AppointmentDTO>();
    var nonMatches = new List<AppointmentDTO>();
    foreach (var item in res)
    {
        if (item.Coach.Id == id)
        {
            matches.Add(item);
        }
        else
        {
            nonMatches.Add(item);
        }
    }
    matches.AddRange(nonMatches);
    res = matches;
}

这种方式仅遍历原列表一次,内存开销和原方案相近,但减少了一次遍历的性能消耗,同时能保留匹配元素和非匹配元素各自的原有相对顺序。

方案2:利用布尔值排序(代码更简洁)

借助C#排序中布尔值的特性(true优先级高于false),用OrderByDescending实现一行代码调整顺序:

List<AppointmentDTO> res = await this.appointmentService.GetCanReserve(coachId, date);

var id = HttpContext.User.FindFirst("id")?.Value;
if (id is not null)
{
    res = res.OrderByDescending(r => r.Coach.Id == id).ToList();
}

该方案代码更简洁,底层实现同样是一次遍历相关的稳定排序操作,能保留原列表中元素的相对顺序,性能和方案1接近,适合追求代码简洁性的场景。

内容的提问来源于stack exchange,提问作者lyj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 22:39:19