【发布时间】:2020-04-07 07:40:34
【问题描述】:
也许我做错了,但我正在尝试通过将 List 转换为 HashSet 来对其进行洗牌,
List<Article> art = new List<Article>(rootobject.articles);
HashSet<Article> setart = new HashSet<Article>(art);
当我遍历这两个列表时,
foreach (Article a in art)
{
Console.WriteLine(a.title)
}
和哈希集,
foreach (Article a in setart)
{
Console.WriteLine(a.title)
}
我以完全相同的顺序得到完全相同的输出。我在想默认情况下使用强制转换操作应该随机化列表,但似乎并非如此。
我哪里错了?
【问题讨论】:
-
为什么你认为将数据放入哈希集中会打乱它?
-
Article是如何实现的?它是否覆盖了GetHashCode和Equals方法?请同时参考hashset的备注部分 -
如果你想打乱一个列表,你可以将第一个元素与随机元素交换,将第二个元素与随机元素交换,...,将第 n 个元素与随机元素交换。
-
HashSet不保证插入顺序;订单可能取决于 .Net 版本、项目本身等,也可能取决于HashSetshuffle 项目。项目只是可以(不是必须)按任意顺序排列 -
查看重复项以获得您问题的答案,以及以随机顺序对列表进行排序的更好方法。