看板 C_Sharp 關於我們 聯絡資訊
需求是在前端顯示資料時,想要讓資料隨機排序, 使用者按下下一頁按鈕時,不要顯示重覆資料。 後端的語法類似這樣 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://www.ptt.cc/bbs/C_Sharp/M.1508146628.A.008.html
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