作者vi000246 (Vi)
看板C_Sharp
标题[问题] 依据日期 产出随机排序
时间Mon Oct 16 17:37:05 2017
需求是在前端显示资料时,想要让资料随机排序,
使用者按下下一页按钮时,不要显示重覆资料。
後端的语法类似这样
someTable.OrderBy(x => Guid.NewGuid()).Skip(pageCount).Take(pageSize)
但这样当使用者切换分页时,有可能显示之前出现过的资料
所以我想了一套演算法,用每天的日期当种子,
开根号後取小数点後面的位数当作排序
产生出每日都会变动的排序
程式码如图
https://imgur.com/uX49AQv
程式码如下
https://dotnetfiddle.net/sjNZAA
我觉得我这演算法有点不够随机
本来是要开个Sort栏位 再用排程每日更新排序的
想先研究能不能直接用程式解决这问题
不知道大家有什麽建议呢?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 61.218.40.109
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1508146628.A.008.html
1F:→ vi000246: 问题解决了 改用Fisher–Yates shuffle算法 10/17 09:51
程式码
public static IList<T> Shuffle<T>(this IList<T> list, Random random)
{
for (var i = list.Count; i > 1; i -= 1)
{
var j = random.Next(i);
var temp = list[j];
list[j] = list[i - 1];
list[i - 1] = temp;
}
return list;
}
※ 编辑: vi000246 (61.218.40.109), 10/17/2017 09:52:54