Вы можете сделать это с помощью метода Linq Почтовый индекс:
var numbers = new[] { 1, 2, 3, 4, 5 };
var pairs = numbers.Zip(numbers.Skip(1));
foreach (var pair in pairs)
{
Console.WriteLine($"First: {pair.First}, Second: {pair.Second}");
}
Выход:
First: 1, Second: 2
First: 2, Second: 3
First: 3, Second: 4
First: 4, Second: 5
Пример выполнения: https://dotnetfiddle.net/HZuDdR
using System;
using System.Linq;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
var list = new List<int>{1, 2, 3, 4, 5};
var pairs = list.Take(list.Count() - 1).Select((z, index) => new
{
a = z, b = list[index + 1]
}).ToList();
pairs.ForEach(p => Console.Write("(" + p.a + "," + p.b + ") "));
}
}
https://dotnetfiddle.net/6oXQwC
Правда, и ваше решение с зипом тоже намного чище.
Решение Zip действительно чище, но по какой-то причине оно не работает на некоторых версиях С#.
Лично я бы не стал использовать здесь
ToList
и всегда избегал использованияList.ForEach
, когда нет реальной пользы от использования стандартного циклаforeach
. (почему см. здесь)