var letters= new string[] { "A", "B", "C", "D", "E" };
var numbers= new int[] { 1, 2, 3 };
var q = letters.Zip(numbers, (l, n) => l + n.ToString());
foreach (var s in q)
Console.WriteLine(s);
TimeSegments 表示队列中当前或已排队的项(最后一个元素被 Zip 截断)。
Skip (1)表示队列中的下一个或查看项。
Zip 方法将这两个对象组合成一个具有 Next 和 Current 属性的匿名对象。
然后我们使用 Where 进行筛选,并使用 AsParall.ForAll 进行更改。
当然,最后一个位可以只是一个常规 foreach 或另一个 Select 语句,它返回有问题的时间段。
如果我希望在一个列表元素用完的地方继续执行 zip,该怎么办
在这种情况下,较短的列表元素应该采用默认值
在这种情况下是 A1,B2,C3,D0,E0。-梁19’15 at 3:29
您要做的是使用 Array。Resize ()用默认值填充较短的序列,然后将它们压缩在一起。
代码示例:
var letters = new string[] { "A", "B", "C", "D", "E" };
var numbers = new int[] { 1, 2, 3 };
if (numbers.Length < letters.Length)
Array.Resize(ref numbers, letters.Length);
var q = letters.Zip(numbers, (l, n) => l + n.ToString());
foreach (var s in q)
Console.WriteLine(s);
static void Main(string[] args)
{
var letters = new string[] { "A", "B", "C", "D", "E" };
var numbers = new int[] { 1, 2, 3 };
var q = letters.Zip(numbers, (l, n) => l + n.ToString()).ToArray();
var qDef = ZipDefault(letters, numbers);
Array.Resize(ref q, qDef.Count());
// Note: using a second .Zip() to show the results side-by-side
foreach (var s in q.Zip(qDef, (a, b) => string.Format("{0, 2} {1, 2}", a, b)))
Console.WriteLine(s);
}
static IEnumerable<string> ZipDefault(string[] letters, int[] numbers)
{
switch (letters.Length.CompareTo(numbers.Length))
{
case -1: Array.Resize(ref letters, numbers.Length); break;
case 0: goto default;
case 1: Array.Resize(ref numbers, letters.Length); break;
default: break;
}
return letters.Zip(numbers, (l, n) => l + n.ToString());
}