Здравствуйте, Passerby, Вы писали:
A>>Перебирается конечно, но просто в цикле, без создания промежуточных коллекций. В этом и смысл.
P>Если без промежуточной коллекции, то для каждой итерации по-новому разбирается строка (предыдущий разбор нигде в промежуточной коллекции не сохранен).
Нет. В этом примере, чтобы напечатать на экране очередное значение, для каждой итерации перезапуск часов с нуля не происходит
| Скрытый текст |
| using System;
using System.Collections.Generic;
using System.Threading;
foreach (var value in Generate())
{
Console.WriteLine(value);
}
IEnumerable<int> Generate()
{
while (true)
{
Thread.Sleep(1000);
yield return DateTime.Now.Second;
}
}
|
| |
Тут тоже
| Скрытый текст |
| using System;
using System.Collections.Generic;
foreach (var value in Parse(",,,1 20, 300; 4004++"))
{
Console.WriteLine(value);
}
IEnumerable<int> Parse(string input)
{
var index = 0;
while (true)
{
while (index < input.Length && char.IsDigit(input[index]) == false)
{
index++;
}
if (index >= input.Length)
{
yield break;
}
var count = 1;
while (index + count < input.Length && char.IsDigit(input[index + count]))
{
count++;
}
yield return int.Parse(input[index..(index + count)]);
index += count + 1;
}
}
|
| |