首页 > 解决方案 > 使用 HashSet 删除范围内的项目

问题描述

我正在使用哈希集。

我正在寻找一种从 HashSet 开头删除项目范围的方法。

有了List它就可以做到RemoveRange

例子

从头开始删除 10 个项目:

dinosaurs.RemoveRange(0, 10);

这可以用 HashSet 完成吗?

[编辑] HashSet 的顺序无关紧要,因为它只包含随机字符串。

标签: c#hashset

解决方案


HashSet存储唯一的数据片段(在后台,存储与存储在 a 中的键相同Dictionary)因此删除“前”10 个项目没有多大意义,因为它们将被有效地随机排序,但实际上并非如此随机满足大多数需求。

如果您需要更合适地随机订购它们,OrderBy可以这样做:

var r = new Random();
foreach(var dinoToRemove in dinosaurs
    .OrderBy(x => r.Next())
    .Take(10))
{
    dinosaurs.Remove(dinoToRemove);
}

如果你真的决定删除前十个,你也可以使用一个迭代器RemoveWhere

var count = 0;
dinosaurs.RemoveWhere(x => count++ < 10);

推荐阅读