c# - 加入两个不同长度的列表

标签 c# linq

我正在使用 LINQ:

List<String> listA = new List<string>{"a", "b", "c", "d", "e", "f", "g"};  
List<String> listB = new List<string>{"1", "2", "3"};  

期望的结果:

{"a", "1", "b", "2", "c", "3", "d", "1", "e", "2", "f", "3", "g", "1"}  

我尝试过但失败了:

var mix = ListA.Zip(ListB, (l1, l2) => new[] { l1, l2 }).SelectMany(x => x);  
//Result : {"a", "1", "b", "2", "c", "3"}  

var mix = ListA.Zip(ListB, (a, b) => new[] { a, b })
        .SelectMany(x => x)
        .Concat(ListA.Count() < ListB.Count() ? ListB.Skip(ListA.Count()) : ListA.Skip(ListB.Count()))
        .ToList();  
//Result : {"a", "1", "b", "2", "c", "3", "d", "e", "f", "g"}  

如何使用 LINQ 执行此操作?

最佳答案

这有效,即使我不确定为什么您需要它作为 linq 表达式:

var mix = Enumerable
           .Range(0, Math.Max(listA.Count, listB.Count))
           .Select(i => new[] { listA[i % listA.Count], listB[i % listB.Count] })
           .SelectMany(x => x);

关于c# - 加入两个不同长度的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53169146/

相关文章:

c# - Prism 7.1 : IContainerProvider & IContainerRegistry

c# - 部署无需安装即可运行的 Visual Studio 应用程序的最佳方式

c# - 从数据表中获取不同的值

c# - 有没有办法通过 x :Name as an alternative to its zero-based index? 引用网格列

c# - 为什么在 .NET 中尝试关闭 SqlConnection 时出现 ThreadAbortException?

linq - PredicateBuilder 可以生成跨多个表的谓词吗?

c# - 如何通过将所有元素加或在一起来简化列表?

c# - LINQ 根据对象行中的整数获取 10 个对象

c# - 如何在 linq 的 select 语句中使用 where 子句。 (即在属性(property)上。)

c# - 实现扩展方法