Сравните ArrayBuffer [Array [String]] со Scala в режиме FP

Вы можете написать функцию генератора, которая возвращает объекты даты, начиная с сегодняшнего дня:

import datetime

def date_generator():
  from_date = datetime.datetime.today()
  while True:
    yield from_date
    from_date = from_date - datetime.timedelta(days=1)

Этот генератор возвращает даты, начиная с сегодняшнего дня, и возвращается назад один день за раз. Вот как взять первые 3 даты:

>>> import itertools
>>> dates = itertools.islice(date_generator(), 3)
>>> list(dates)
[datetime.datetime(2009, 6, 14, 19, 12, 21, 703890), datetime.datetime(2009, 6, 13, 19, 12, 21, 703890), datetime.datetime(2009, 6, 12, 19, 12, 21, 703890)]

Преимущество этого подхода в понимании цикла или списка состоит в том, что вы можете вернуться столько раз, сколько хотите.

Редактировать

Более компактная версия с использованием выражения генератора вместо функции:

date_generator = (datetime.datetime.today() - datetime.timedelta(days=i) for i in itertools.count())

Использование:

>>> dates = itertools.islice(date_generator, 3)
>>> list(dates)
[datetime.datetime(2009, 6, 15, 1, 32, 37, 286765), datetime.datetime(2009, 6, 14, 1, 32, 37, 286836), datetime.datetime(2009, 6, 13, 1, 32, 37, 286859)]
-1
задан Martin 19 March 2019 в 14:24
поделиться

1 ответ

Если мы хотим проверить, одинаковы ли два прохождения значений в типе A, мы должны иметь порядок в типе данных A или функцию, чтобы проверить, являются ли два значения типа A одинаковыми.

Решение: сначала, имея какой-то способ проверить, являются ли два массива одинаковыми (записав порядок или функцию), а затем, написать функцию, чтобы проверить, являются ли два проходимых массива [T] то же самое.

Следующая функция проверяет, совпадают ли два массива:

def isTheSameArray[T](xs: Array[T], ys: Array[T])(implicit ordering: Ordering[T]): Boolean = 
  xs.size == ys.size && xs.zip(ys).forall{ case (x, y) => x == y } 

Теперь мы можем написать функцию, чтобы проверить, совпадают ли два буфера массива, как показано ниже:

def isTheSame[T](xs: Traversable[Array[T]], ys: Traversable[Array[T]])(implicit ordering: Ordering[T]): Boolean = 
  if (xs.size != ys.size) false 
  else if (xs.isEmpty == ys.isEmpty) true
  else isTheSameArray(xs.head, ys.head) && isTheSame(xs.tail, ys.tail) 
0
ответ дан N.Hung 19 March 2019 в 14:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: