使用HashSet删除项目范围

时间:2018-06-15 20:51:49

标签: c# hashset

我正在使用HashSet。

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

使用List可以使用RemoveRange

完成

示例

从头开始删除10个项目:

dinosaurs.RemoveRange(0, 10);

可以用HashSet完成吗?

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

2 个答案:

答案 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(即您想要从现有实例中删除项目),则需要逐个执行此操作。