powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Ленивая склейка двух IEnumerable<string> попарно
4 сообщений из 4, страница 1 из 1
Ленивая склейка двух IEnumerable<string> попарно
    #40055100
WinterGraveyard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Такая задача: есть 2 IEnumerable<string>, их нужно склеить попарно, получив на выходе IEnumerable<string> с скленными строками.
Т.е., например, первая последовательность: "A", "B", "C", вторая "1", "2", "3", на выходе нужно получить последовательность "A1", "B2", "C3". При этом если в исходных последовательностях содержится разное количество элементов, должна выбрасываться ошибка. Если перегнать исходные последовательности в List<string>, то всё элементарно, но хочется такую операцию провернуть ленивым образом, и я никак не могу сообразить, как это реализовать.
...
Рейтинг: 0 / 0
Ленивая склейка двух IEnumerable<string> попарно
    #40055105
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
var seq1 = new[] {"A", "B", "C"};
var seq2 = new[] {"1", "2", "3"};
var result = seq1.Zip(seq2, (x, y) => $"{x}{y}");


А, ну, правда, Zip не бросит exception если разное кол-во элементов.
...
Рейтинг: 0 / 0
Ленивая склейка двух IEnumerable<string> попарно
    #40055111
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если надо точное соответствие, то, например как-то так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
public static IEnumerable<R> ZipExact<T1, T2>(this IEnumerable<T1> source1, IEnumerable<T2> source2, Func<T1, T2, R> selector) 
{
    using var e1 = source1.GeEnumerator();
    using var e2 = source2.GetEnumerator();

    while(true)
    {
        var n1 = e1.MoveNext();
        var n2 = e2.MoveNext();

        if(n1 && n2)
        {
            yield return selector(e1.Current, e2.Current);
        }
        else if(!n1 && !n2)
       {
            break;
       }
       else
       { 
           throw new InvalidOpertaionException("Different sequence lengths");
       }
    } 
}
...
Рейтинг: 0 / 0
Ленивая склейка двух IEnumerable<string> попарно
    #40055150
WinterGraveyard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, то, что нужно.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Ленивая склейка двух IEnumerable<string> попарно
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]