Я могу архивировать больше чем два списка вместе в Scala?

Каждый раз, когда я приблизился к уважаемому типу гуру о Emacs, они предупредят меня далеко. Большинству из них не нравился он, также. Я взял это в качестве подсказки.

OTOH, я интересовался TECO давным-давно (теперь, Вы знаете мой возраст), и я слышу, что Emacs вырос из этого. Так, я все еще задаюсь вопросом...

88
задан pr1001 3 November 2009 в 01:44
поделиться

4 ответа

Я не верю, что можно сгенерировать список кортежей произвольного размера, но функция транспонирования делает именно то, что вам нужно, если вы не против получить список списков вместо этого.

34
ответ дан 24 November 2019 в 07:23
поделиться

Scala обрабатывает все свои кортежи разных размеров как разные классы ( Tuple1 , Tuple2 , Tuple3 , Tuple4 , ..., Tuple22 ), хотя все они наследуются от черты Product , эта черта не несет достаточно информации для фактического использования значений данных из разных размеров кортежей, если все они могут быть возвращены одной и той же функцией. (И дженерики scala также недостаточно мощны для обработки этого случая.)

Лучше всего написать перегрузки функции zip для всех 22 размеров кортежей. Генератор кода, вероятно, поможет вам в этом.

5
ответ дан 24 November 2019 в 07:23
поделиться

Да , с zip3 .

11
ответ дан 24 November 2019 в 07:23
поделиться

Я не верю, что это возможно без повторения. По одной простой причине: вы не можете определить тип возврата запрашиваемой функции.

Например, если ваш ввод был List (List (1,2), List (3,4)) , то тип возврата будет List [Tuple2 [Int]] . Если бы у него было три элемента, тип возвращаемого значения был бы List [Tuple3 [Int]] и т. Д.

Вы можете вернуть List [AnyRef] или даже ] Перечислите [Продукт] , а затем сделайте несколько наблюдений, по одному для каждого условия.

Что касается общей перестановки списка, это работает:

def transpose[T](l: List[List[T]]): List[List[T]] = l match {
  case Nil => Nil
  case Nil :: _ => Nil
  case _ => (l map (_.head)) :: transpose(l map (_.tail))
}
5
ответ дан 24 November 2019 в 07:23
поделиться
Другие вопросы по тегам:

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