List集合中如何将某个元素放到集合第一个

时间:2025-01-29 07:28:52

方案一:先删后加法

这要看业务本身的列表本身已经是排序好了;有顺序要求这个方式是可以的;如果没有顺序要求可以参考方案二的方式;

看标题就知道不是什么高深的算法,实现原理就是,获取用户"特别关注"信息的Id集合recommList,循环这个List集合,从用户当前页的信息集合(pageList)中找到"特别关注"的信息,然后用一个临时对象temp接收,从pageList删除这个元素,最后把临时对象temp插入到pageList中的第一个位置。需要注意一点的时,因为信息都是按刷新时间降序排列,所以在获取用户"特别关注"信息的Id集合recommList的时候要按刷新时间升序排列,因为只有按升序排列,执行完先删后加法之后,"特别关注"中最新的信息才会排列在第一个。

var pageList = GetPageListByUserId(page,pageSize,userId);//分页获取用户发布的信息集合.
//处理关注信息,若关注信息太多则这种处理方式不适合.
var recommList = GetListByUserId(userId);//获取用户的关注信息Id集合,默认是升序,所以经过处理之后最后设置为特别关注的在最前面.
if (recommList != null && >0)
{
//关注信息放在首位,最后标注为"特别关注"的信息应在最前面.
foreach (var id in recommList)
{
var temp = (m =>  == id);//默认是升序,所以经过处理之后最后标注为"特别关注"的信息在最前面.
if (temp == null)
{
continue;
}
(temp);//先删:直接移除元素.
 = true;//这里可以做一些处理,比如设置InfoModel的IsRecommInfo(是否是关注信息)为true.
(0, temp);//后加:插入到索引为0的位置即第一个.
}
}

方案二:排序方式替换

在结果集没有顺序要求的情况下可以使用这种;
      
            try
            {
                var result = new List<GCountryExtend>();
                using (ServiceManager<IGCountry> sm = new ServiceManager<IGCountry>())
                {
                    result = ();
                    //处理中国优先在第一位
                    if (() && >1)
                    {
                        var index = (x=>=="中國");
                        if (index>0)
                        {
                            var firstCountry = result[0];
                            var china = result[index];
                            result[index] = firstCountry;
                            result[0] = china;
                        }
                       
                    }
                }
                return result;
            }
            catch (Exception ex)
            {
                throw ex;
            }