我正在使用HashSet。
我正在寻找一种从HashSet开头删除项目范围的方法。
使用List
可以使用RemoveRange
示例
从头开始删除10个项目:
dinosaurs.RemoveRange(0, 10);
可以用HashSet完成吗?
[编辑] HashSet的顺序无关紧要,因为它只包含随机字符串。
答案 0 :(得分:0)
{"names":["name1","name2","name3"]}
存储独特的数据(在引擎盖下,存储与存储在HashSet
中的密钥相同)因此删除"是不合理的。第一个" 10个项目,因为它们将被有效地随机排序,但对于大多数需求而言实际上并不是随机的。
如果您需要更适合随机排序,Dictionary
可以这样做:
OrderBy
如果你真的决定删除前十个,你也可以使用var r = new Random();
foreach(var dinoToRemove in dinosaurs
.OrderBy(x => r.Next())
.Take(10))
{
dinosaurs.Remove(dinoToRemove);
}
RemoveWhere
答案 1 :(得分:-1)
您可以使用LINQ并将结果传递给HashSet构造函数:
var filteredList = new HashSet<Dinosaur>
(
originalList.Skip(10)
);
正如Servy所说,可能不会对HashSet进行排序,因此您可能希望在跳过10之前获得有序的可枚举。
var filteredList = new HashSet<Dinosaur>
(
originalList
.OrderBy( x => x.Foo )
.Skip(10)
);
如果您不想实例化新的HashSet(即您想要从现有实例中删除项目),则需要逐个执行此操作。