Csharp/C#教程:从.NET HashSet中按索引选择元素分享


从.NET HashSet中按索引选择元素

目前我正在使用从HashSet派生的自定义类。 在特定条件下选择项目时代码中有一点:

 var c = clusters.Where(x => x.Label != null && x.Label.Equals(someLabel)); 

它工作正常,我得到了这些元素。 但有没有办法可以在集合中接收元素的索引以与ElementAt方法一起使用,而不是整个对象?

看起来或多或少会像这样:

 var c = select element index in collection under certain condition; int index = c.ElementAt(0); //get first index clusters.ElementAt(index).RunObjectMthod(); 

是否手动迭代整个集合更好的方法? 我需要补充说它是一个更大的循环,所以这个Where子句对不同的someLabel字符串执行多次。

编辑

我需要这个吗? clusters是一组文档集合的集合。 文档按主题相似性分组。 因此,算法的最后一步是发现每个群集的标签。 但算法并不完美,有时它会使两个或多个具有相同标签的聚类。 我想要做的只是将这些集群合并为一个集群。

集合通常没有索引。 如果位置对您很重要,那么您应该使用List而不是(或可能以及)一组。

现在.NET 4中的SortedSet略有不同,因为它维护一个排序的值顺序。 但是,它仍然没有实现IList ,因此使用ElementAt通过索引进行访问会很慢。

如果您可以提供有关您希望此function的更多详细信息,那么它会有所帮助。 你的用例目前还不是很清楚。

如果您在HashSet中保存元素,有时需要按索引获取元素,请考虑在这种情况下使用扩展方法ToList()。 因此,您使用HashSet的function,然后利用索引。

 HashSet hashset = new HashSet(); //the special situation where we need index way of getting elements List list = hashset.ToList(); //doing our special job, for example mapping the elements to EF entities collection (that was my case) //we can still operate on hashset for example when we still want to keep uniqueness through the elements 

没有带散列集的索引。 散列集在某些情况下获得效率的方法之一是不必维护它们。

我也看不出这里有什么优势。 如果你要获得索引,然后使用它,这将比获取元素效率低(获得索引同样有效,然后你有一个额外的操作)。

如果要对同一对象执行多个操作,只需按住该对象即可。

如果你想在几个对象上做一些事情,那么在迭代它们的基础上这样做(正常的foreach或对Where()等的结果做foreach )。 如果你想在几个对象上做一些事情,然后在这几个相同的对象上做一些其他事情,你必须在这样的批次中做,而不是在同一个foreach执行所有操作然后存储Where()的结果在List

上述就是C#学习教程:从.NET HashSet中按索引选择元素分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/992276.html

(0)
上一篇 2021年12月24日
下一篇 2021年12月24日

精彩推荐