如何使用LINQ转换二维集合中的维度?考虑以下结构:IEnumerablecollection=new[]{new[]{1,2,3},new[]{4,5,6},new[]{7,8,9}};拿这个集合是为了得到一个由第一项、第二项等组成的IEnumerable集合?也就是说,{1,4,7},{2,5,8},...(尽管我选择的实现是int[]对象,假设您只有IEnumerable函数。谢谢。)这是使用生成器的方法而不是递归方法。数组结构也更少,所以它可能更快,但这纯粹是猜想。publicstaticIEnumerable>Transpose(thisIEnumerable>@this){varenumerators=@this.Select(t=>t.GetEnumerator()).Where(e=>e.MoveNext());while(enumerators.Any()){yieldreturnenumerators.Select(e=>e.Current);enumerators=enumerators.Where(e=>e.MoveNext());代码信用在这里(未经测试,但看起来不错)。publicstaticclassLinqExtensions{publicstaticIEnumerable>Transpose(thisIEnumerable>values){如果(!values.Any())返回值;如果(!values.First().Any())返回Transpose(values.Skip(1));varx=values.First().First();varxs=values.First().Skip(1);varxss=values.Skip(1);返回new[]{new[]{x}.Concat(xss.Select(ht=>ht.First()))}.Concat(new[]{xs}.Concat(xss.Select(ht=>ht.跳过(1))).Transpose());}}//输入:转置[[1,2,3],[4,5,6],[7,8,9]]//输出:[[1,4,7],[2,5,8],[3,6,9]]varresult=new[]{new[]{1,2,3},new[]{4,5,6},new[]{7,8,9}}。转置();只是我的2美分在纯linq中:vartranspond=collection.First().Select((frow,i)=>collection.Select(row=>row.ElementAt(i)));或者有一些不成熟的东西:varr1=collection.First().Select((frow,i)=>collection.Select(row=>row.ToArray()[i]));如果保证所有元素的长度相同,那么可以这样做:以上是C#学习教程:如何使用LINQ转换二维集合中的维度?所有分享的内容,如果对你有用,需要进一步了解C#学习教程,希望大家多多关注—IEnumerable>Transpose(IEnumerable>collection){varwidth=collection.First().Count();varflattened=collection.SelectMany(c=>c).ToArray();varheight=flattened.Length/width;varresult=newint[宽度][];for(inti=0;i站,如涉及侵权,请点右联系管理员删除。如需转载,请注明出处: