我有一个ListView绑定到List。 listview实现了自定义分页,其中只返回页面上的结果数,这在结果按字母顺序排列时效果很好。但是,我想尝试以随机顺序返回结果 - 该场景是一个销售办公室,其中团队成员显示在列表视图上。
我正在寻找一种允许自定义分页但保持结果随机化的算法。例如,按字母顺序,它很简单 - .Take(Page#* ResultsOnPage)。但是,如果每次加载页面时它都是随机的,那么个人可以在多个页面上显示,而一些人根本不显示。
所以目标是:
这是否可行,或者我是否需要具有逻辑维护的顺序才能成功实现自定义分页?
答案 0 :(得分:2)
扩展zmbq的答案,你不需要创建一个类,你可以简单地用随机值填充一个新的列表。以下内容来自this post。
Random rnd = new Random();
var randomizedList = from item in list
orderby rnd.Next()
select item;
答案 1 :(得分:2)
实际上,计算机没有“随机”这样的东西。
如果使用相同的种子值对Random函数进行种子处理,则Random函数将返回相同的值序列。这就是为什么随机数经常在当前时间播种的原因。如果将种子值保存到视图状态,则应该能够一遍又一遍地重新生成相同的列表。如果要生成新的随机顺序,只需重新生成种子。
答案 2 :(得分:1)
显然可能,问题是 - 做这件事的最佳方式是什么。
我认为你应该随机化你的清单,让其他一切照常工作。如果那是不可能的,你应该在列表前放置一个Randomizer(我的术语,不要查找......)。像这样:
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连接到Randomizer而不是List,并让其他所有内容保持不变。
答案 3 :(得分:1)