一次循环2个列表我有两个相同长度的列表,是否可以一次循环遍历这两个列表?我正在寻找正确的语法来执行以下操作foreachitemA,itemBinListA,ListB{Console.WriteLine(itemA.ToString()+","+itemB.ToString());你认为这在C#中可行吗?如果是,与此等效的lambda表达式是什么?[编辑]:澄清;这在您不能使用索引器的通用LINQ/IEnumerable上下文中很有用,因为a:它不存在于可枚举中,并且b:您不能保证您可以多次读取数据。由于OP提到了lambda,LINQ可能不会走得太远(是的,我确实意识到LINQ和lambda并不完全相同)。听到你需要更少的Zip操作符;你可以欺骗它:staticvoidMain(){int[]left={1,2,3,4,5};string[]right={"abc","def","ghi","jkl","mno"};//使用KeyValuePair方法foreach(variteminleft.Zip(right)){Console.WriteLine("{0}/{1}",item.Key,item.Value);}//使用投影方法foreach(stringiteminleft.Zip(right,(x,y)=>string.Format("{0}/{1}",x,y))){Console.WriteLine(item);}}//库代码;编写一次并塞入util程序集...//将每个pais作为KeyValuePair返回staticIEnumerable>Zip(thisIEnumerableleft,IEnumerableright){returnZip(left,right,(x,y)=>newKeyValuePair(x,y));}//为每一对接受来自调用者的投影staticIEnumerableZip(thisIEnumerableleft,IEnumerableright,Funcselector){while(leftE.MoveNext()&&rightE.MoveNext()){yieldreturnselector(leftE.Current,对E.Current);相反,在一个普通的旧循环中执行它会简单得多...for(inti=0;i你可以显式地执行此操作IEnumeratorListAEnum=ListA.GetEnumerator();IEnumeratorListBEnum=ListB.GetEnumerator();ListBEnum.MoveNext();while(ListAEnum.MoveNext()==true){itemA=ListAEnum.getCurrent();itemB=ListBEnum.getCurrent();Console.WriteLine(itemA.ToString()+","+itemB.ToString());}至少这个(或类似的东西)是编译器为foreach循环所做的。我没有测试它,我猜枚举器缺少一些模板参数。只需从中查找GetEnumerator()列表和IEnumerator接口。我推荐普通的旧for循环,但你应该考虑不同的数组长度。所以for(inti=0;icanbecomefor(inti=0;ievengoesintofor(inti=0;我有同样的问题,但是使用在列表中包含列表的对象......对于它的价值,这可能会帮助遇到同样问题的人。因为IndexOf是O(n),所以运行时间不是很好,但是在当时我处理的内部foreach循环比这个例子多得多,所以我不想处理迭代器变量。在这种情况下,我非常想念PHPsforeach($arrayListas$key=>$value)符号......也许我在C#中遗漏了一些东西,必须有一种方法可以在O(c)时间内获取索引!(遗憾的是这篇文章说不:在'foreach'循环中获取数组键)classStock{stringsymbol;列出每小时的价格;//提供24位小数的列表}//获取昨天和今天的每小时价格ListstockMondays=Stocks.GetStock("GOOGL,IBM,AAPL",DateTime.Now.AddDay(-1));列出stockTuesdays=Stocks.GetStock("GOOGL,IBM,AAPL",DateTime.Now);try{foreach(StocksMondayinstockMondays){StocksTuesday=stockTuesday[stockMondays.IndexOf(sMonday)];foreach(sMonday.prices中的十进制星期一价格){十进制星期二价格=sTuesday.prices[sMonday.prices.IndexOf(mondayPrice)];//现在做点什么}}}catch(Exceptionex){//列表计数不匹配的某些原因?}SenthilKumar的技术博客有一系列文章介绍C#(Python)Itertools的实现,包括itertools.izip。从ItertoolsforC#-CycleandZip,您可以获得任意数量的迭代(不仅仅是列表)的解决方案。请注意,Zip在每次迭代时都会生成一个数组:while(true){intindex=0;T[]values=newT[enumerators.Length];foreach(枚举器中的IEnumerator枚举器){if(!enumerator.MoveNext())yieldbreak;值[索引++]=enumerator.Current;}产生返回值;}}代码获取所有迭代的枚举器,将所有枚举器向前移动,将它们的当前值累加到一个数组中并产生该数组。它在任何枚举器用完元素之前执行此操作。我有这个小函数可以帮助我遍历这两个列表对象。schema的类型是SqlData,是一个具有三个属性的类。data是一个包含动态类型值的列表。首先,我遍历模式集合,而不是使用项目的索引来遍历数据对象。以上就是C#学习教程:一次2个列表分享的全部内容。如果对大家有用,需要详细了解C#学习教程,希望大家多多关注---publicListSqlDataBinding(Listschema,Listdata){foreach(SqlDataiteminschema){item.Values=数据[schema.IndexOf(item)];}returnschema}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
