当前位置: 首页 > 编程语言 > C#

使用LINQ查询获取索引值集合分享

时间:2023-04-10 18:02:33 C#

使用LINQ查询获取索引值集合有没有更好的方法?string[]s={“零”、“一”、“二”、“三”、“四”、“五”};varx=s.Select((a,i)=>new{Value=a,Index=i}).Where(b=>b.Value.StartsWith("t")).Select(c=>c.指数);即我正在寻找一种更有效或更优雅的方式来获得与标准项目位置相匹配的东西。您可以轻松添加自己的扩展方法:publicstaticIEnumerableIndexesWhere(thisIEnumerablesource,Funcpredicate){intindex=0;foreach(Telementinsource){if(predicate(element)){yieldreturnindex;}索引++;}}然后使用它:string[]s={"zero","one","two","three","four","five"};varx=s.IndexesWhere(t=>t.StartsWith("t"));如果您只是将该示例用作学习LINQ的一种方式,请忽略这篇文章。我不清楚LINQ实际上是最好的方法。下面的代码似乎更有效,因为不需要创建新的匿名类型。当然,您的示例可能是人为设计的,并且该技术在不同的上下文中可能更有用,例如在可以利用值索引的数据结构中,但下面的代码相当简单易懂(没有'没有想到)需求)并且可以说效率更高。string[]s={“零”、“一”、“二”、“三”、“四”、“五”};列表matchingIndices=newList();for(inti=0;ifori说好像没问题。您可以通过将选择更改为以下内容来保存几个字符:.Select((Value,Index)=>new{Value,Index})CollectionList中还有一个FindIndex方法,您可以为其创建一个可以返回的方法从集合索引的删除方法。可以参考msdn中的以下链接http://msdn.microsoft.com/en-us/library/x1xzf2ca.aspx。这个怎么样?它类似于原始海报,但我先选择索引,然后构建一个符合要求的集合。varx=s.Select((a,i)=>i).Where(i=>s[i].StartsWith("t"));这比其他一些答案效率低,因为列表恰好重复了两次。我和一个同事讨论了这个有趣的问题,一开始我觉得JonSkeet的解决方案很棒,但是我的同事指出,如果函数是IEnumerable的扩展,那么它可以在集合实现它的地方使用。对于数组,可以肯定地说会遵守使用foreach生成的顺序(即foreach将从头到尾迭代),但对于其他集合(列表、字典等)则不一定如此,其中foreach不一定体现“成秩序”。无论功能如何,它都可能会产生误导。最后,我得到了类似于tvanfosson的答案,但作为数组的扩展方法:publicstaticint[]GetIndexes(thisT[]source,Funcpredicate){for(inti=0;i这里希望List.ToArray尊重最后一次操作的顺序...以上是C#学习教程:使用LINQ查询获取索引值的集合。C#学习教程,我希望大家多多关注——本文采集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除,如需转载请注明出处: