Смотрите на проект Commons CLI, много хорошего материала там.
Zip - это когда вы берете две входные последовательности и создаете выходную последовательность, в которой каждая два элемента из входных последовательностей в одной позиции объединяются с помощью некоторой функции. Пример в Haskell:
Вход:
zipWith (+) [1, 2, 3] [4, 5, 6]
Выход:
[5, 7, 9]
Вышеупомянутое более общее определение; иногда zip
конкретно относится к объединению элементов в виде кортежей. Например, снова в Haskell:
Вход:
zip [1, 2, 3] [4, 5, 6]
Выход:
[(1, 4), (2, 5), (3, 6)]
И более общая версия называется «zip with». Вы можете рассматривать «zip» как частный случай «zipWith»:
zip xs ys = zipWith (\x y -> (xs, ys)) xs ys
zip - это распространенный метод функционального программирования, такой как map или fold. Вы найдете эти функции в ранних шепелявках, вплоть до ruby и python. Если вы объедините их вместе, вы получите List ((1, «one»), (2, «two»), (3, «three»))
или из командной строки scala, вы получите:
scala> List(1,2,3).zip(List("one","two","three"))
res2: List[(Int, java.lang.String)] = List((1,one), (2,two), (3,three))
Когда я впервые увидел это в Python, не зная функционального программирования, я подумал, что это связано с форматом сжатия. Узнав больше о функциональном программировании, я стал им пользоваться все чаще и чаще.
Вы можете использовать следующий код в Python:
>>> a = [1,2]
>>> b = [3,4]
>>> zip(a,b)
[(1,3),(2,4)]
Ответ Павла в значительной степени описывает это. Я просто приведу пример F #:
let x = [1;2]
let y = ["hello"; "world"]
let z = Seq.zip x y
Значение z
будет последовательностью, содержащей кортежи элементов в одной позиции из двух последовательностей:
[(1, "hello"); (2, "world")]
К сожалению, у меня недостаточно очков, чтобы даже оставить комментарий к верхнему ответу, но
zip xs ys = zipWith xs ys (\x y -> (xs, ys))
- неверно , это должно быть:
zip xs ys = zipWith (\x y -> (x,y)) xs ys
или просто :
zip = zipWith (\x y -> (x,y))