Я играю с LINQ и смежными темами и задавался вопросом о следующем.Недвижимость с Перечислимым или список
У меня есть 2 метода получения последовательности Фибоначчи. Я начал с:
public static IEnumerable<int> Fibonacci
{
get
{
int i = 0;
int j = 1;
int temp = 0;
while (true)
{
yield return i;
temp = i;
i = j;
j = temp + i;
}
}
}
Но это заставило меня задуматься, почему я выбираю это снова:
public static IList<int> Fibonacci(long to)
{
IList<int> fibList = new List<int>();
int i = 0;
int j = 1;
int temp, index = 0;
while (index < to)
{
fibList.Add(i);
temp = i;
i = j;
j = temp + i;
index++;
}
return fibList;
}
IList является перечислимым, а + я мог бы добавить параметризацию к нему. Я действительно не ищу оптимизацию или вещи или вещи, как использовать < long>, потому что число становится очень быстрым, его просто быстрый пример. Просто некоторые аргументы pro и con каждого метода. Почему и когда я должен использовать этот метод?
Также: со списком вы не можете работать с результатами, пока не вычислите все числа. С помощью IEnumerable вы можете сразу начать работу с результатами и вычислить следующий номер по мере поступления. Вы сокрыли это «потоковым образом», но это было не так ясно. –
Переписан первый, который будет функцией без параметров. Теперь я могу сделать: var result = Fibonacci(). TakeWhile (n => n <10000) .Skip (10); Как я хотел, спасибо :) – Oxymoron
Я бы отменил это и сначала пропустил пропустить. Сохраняет необходимость выполнить проверку n <10000 на первых 10 условиях. –