从.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