Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .Net-具有随机排序的自定义分页_C#_.net_Linq_Paging - Fatal编程技术网

C# .Net-具有随机排序的自定义分页

C# .Net-具有随机排序的自定义分页,c#,.net,linq,paging,C#,.net,Linq,Paging,我有一个绑定到列表的ListView。listview实现了自定义分页,其中只返回页面上的结果数,当结果按字母顺序排列时,这种方式非常有效。但是,我想尝试以随机顺序返回结果-场景是销售办公室,团队成员显示在listview上 我正在寻找一种算法,它允许自定义分页,但保持结果的随机性。例如,按字母顺序,它是简单的-.TakePage*ResultsOnPage。但是,如果每次加载页面时都随机进行,则可能会出现这样的情况,即个人可以显示在多个页面上,而有些页面根本不显示 因此,目标是: 随机列表 从

我有一个绑定到列表的ListView。listview实现了自定义分页,其中只返回页面上的结果数,当结果按字母顺序排列时,这种方式非常有效。但是,我想尝试以随机顺序返回结果-场景是销售办公室,团队成员显示在listview上

我正在寻找一种算法,它允许自定义分页,但保持结果的随机性。例如,按字母顺序,它是简单的-.TakePage*ResultsOnPage。但是,如果每次加载页面时都随机进行,则可能会出现这样的情况,即个人可以显示在多个页面上,而有些页面根本不显示

因此,目标是:

随机列表 从列表中获取给定页面的结果 根据需要获取同一随机列表的下一页。
这是可能的,还是我需要有一个逻辑维护的顺序才能成功实现自定义分页?

这显然是可能的,问题是-最好的方法是什么

我认为你应该随机化你的清单,让其他一切照常进行。如果这不可能,你应该在我的术语中加入一个随机化器,不要查找它。。。在名单的前面。大概是这样的:

class Randomizer<T> : IList<T>
{
    private IList<T> _underlyingList;
    private List<int> _permutation;

    public Randomizer(IList<t> underlying)
    {
        _underlyingList = underlying;
        _permutation = GenerateRandomPermutation(_underlyingList.Count);
    }

    // Implement the IList interface, for example
    public T this[int index] { get { return _underlyingList[_permutation[value]]; } }
}
您可能希望实现ICollection,因为它可以节省一些工作


无论如何,将ListView连接到随机化器而不是列表,并让其他一切保持不变。

很明显,这是可能的,问题是-什么是最好的方法

我认为你应该随机化你的清单,让其他一切照常进行。如果这不可能,你应该在我的术语中加入一个随机化器,不要查找它。。。在名单的前面。大概是这样的:

class Randomizer<T> : IList<T>
{
    private IList<T> _underlyingList;
    private List<int> _permutation;

    public Randomizer(IList<t> underlying)
    {
        _underlyingList = underlying;
        _permutation = GenerateRandomPermutation(_underlyingList.Count);
    }

    // Implement the IList interface, for example
    public T this[int index] { get { return _underlyingList[_permutation[value]]; } }
}
您可能希望实现ICollection,因为它可以节省一些工作


无论如何,请将ListView连接到随机化器,而不是列表,并让其他一切保持不变。

最简单的方法是:

将整个数据集随机化。 然后,将其划分为页面,您可以看到一种将列表划分为更小列表的方法。
当不再需要列表时,您需要一种摆脱列表的方法。

最简单的方法是:

将整个数据集随机化。 然后,将其划分为页面,您可以看到一种将列表划分为更小列表的方法。
当不再需要时,您需要一种摆脱列表的方法。

扩展zmbq的答案,您不需要创建类,只需用随机值填充新列表即可。以下内容来自


扩展zmbq的答案,您不需要创建类,只需用随机值填充一个新列表即可。以下内容来自


事实上,在计算机上并没有随机的东西


如果使用相同的种子值对随机函数进行种子设定,则随机函数将返回相同的值序列。这就是为什么随机数经常在当前时间播种的原因。如果将种子值保存到视图状态,则应该能够反复重新生成相同的列表。如果你想生成一个新的随机顺序,只需重新生成种子。

实际上,计算机上没有随机这回事


如果使用相同的种子值对随机函数进行种子设定,则随机函数将返回相同的值序列。这就是为什么随机数经常在当前时间播种的原因。如果将种子值保存到视图状态,则应该能够反复重新生成相同的列表。如果要生成新的随机顺序,只需重新生成种子。

Hmmmm,是的,这比我的建议简单。我的建议是,只有当T是一个值类型并且在应用程序运行时修改T时,才更好。嗯,我的建议中有“排列”一词,因此在这方面更好:-我认为OP的情况下出现这种情况的几率非常低。嗯,是的,这比我的建议简单。我的建议是,只有当T是一个值类型并且在应用程序运行时修改T时,才更好。嗯,我的建议中有“置换”一词,所以在这方面更好:-我认为OP的情况下发生这种情况的几率很低。