代码之家  ›  专栏  ›  技术社区  ›  sajidnizami

对随机项数据集进行分页

  •  2
  • sajidnizami  · 技术社区  · 15 年前

    我必须在一个网站上生成一个项目列表,在用户会话中,对于该特定的项目列表是随机的。

    我将添加一个链接来演示这个问题。 WebSite Link

    脚本: 当用户进入并点击链接时,页面上的项目应该是随机的。当用户点击第二页,第三页之后,它应该遵循它第一次生成的相同随机模式,这样当我回到第一页时,该页上的项目将与用户第一次点击链接时相同。

    我确实考虑过将所有项目的数据集随机化一次,并将它们保存在会话中,但这是最后的选择。

    1 回复  |  直到 15 年前
        1
  •  1
  •   Jeff Meatball Yang    15 年前

    1)随机数发生器必须是可重复的:通过为每个用户使用一个唯一的种子,并使用random()类,可以生成相同的随机数序列。 跨多个HTTP请求。但是,必须将种子存储在某个地方(我建议使用cookie或隐藏的输入元素)。

    public Random GetGenerator() {
    DateTime now = new DateTime();
    long ticks = now.Ticks();
    
    if(getCookie("ticks") > 0) {
    // existing user:
    ticks = getCookie("ticks"); // you must implement this to get the user's seed
    } else {
    // new user:
    setCookie(now.Ticks()); // you must implement this to set a Cookie/input field value
    }
    
    return new Random(ticks);
    }
    

    2)您必须生成m*(n-1)数字才能最终得到第n页的随机数,其中m是每页的项目数。只有这样,您才能开始为请求的页面生成随机数。