方案一:先删后加法
这要看业务本身的列表本身已经是排序好了;有顺序要求这个方式是可以的;如果没有顺序要求可以参考方案二的方式;
看标题就知道不是什么高深的算法,实现原理就是,获取用户"特别关注"信息的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;
}