Lompat ke isi

Zip (ilmu komputer): Perbedaan antara revisi

Ensiklopedia Pengetahuan Universitas Islam Sultan Agung
Maintenance script (bicara | kontrib)
Impor teks terkontrol dari Wikipedia bahasa Indonesia; revisi 27836784; atribusi sumber disertakan.
 
Maintenance script (bicara | kontrib)
Presentation V4: sitasi, referensi, Math, Wikimedia Commons, dan atribusi
 
Baris 10: Baris 10:
Pada bahasa pemrograman tertentu seperti [[Haskell]], fungsi ini hanya mengembalikan sebanyak jumlah karakter terpendek, yaitu <math>\ell = 2</math> (kata ''ia''):
Pada bahasa pemrograman tertentu seperti [[Haskell]], fungsi ini hanya mengembalikan sebanyak jumlah karakter terpendek, yaitu <math>\ell = 2</math> (kata ''ia''):


<syntaxhighlight lang="haskell">
zip3 "ia" "tuk" "palu"
-- [('i','t','p'),('a','u','a')]
</syntaxhighlight>


== Definisi ==
== Definisi ==
Misalkan &Sigma; adalah [[Alfabet (bahasa formal)|alfabet]] dan  adalah simbol di luar &Sigma;.
Misalkan &Sigma; adalah [[Alfabet (bahasa formal)|alfabet]] dan  adalah simbol di luar &Sigma;.


Misalkan  adalah  [[Kata (bahasa formal)|kata]] ([[barisan]] berhingga) yang tersusun dari anggota &Sigma;. Misalkan pula <math>\ell</math> adalah panjang maksimum kata, yaitu maksimum dari
Misalkan  adalah  [[Kata (bahasa formal)|kata]] ([[barisan]] berhingga) yang tersusun dari anggota &Sigma;. Misalkan pula <math>\ell</math> adalah panjang maksimum kata, yaitu maksimum dari  


Hasil operasi zip dari kata-kata tersebut adalah barisan berhingga dari rangkap- yang disusun dari anggota , dengan kata lain anggota dari :
Hasil operasi zip dari kata-kata tersebut adalah barisan berhingga dari rangkap- yang disusun dari anggota , dengan kata lain anggota dari :
Baris 31: Baris 35:


== Dalam bahasa pemrograman ==
== Dalam bahasa pemrograman ==
[[Subrutin|Fungsi]] zip tersedia dalam beberapa [[bahasa pemrograman]] dan biasa disebut <code>zip</code>. Dalam dialek [[Lisp (bahasa pemrograman)|Lisp]], operasi zip bisa dilakukan dengan fungsi [[Map (fungsi tingkat tinggi)|<code>map</code>]] yang diterapkan terhadap daftar yang diinginkan. Fungsi <code>map</code> dalam Lisp bersifat [[Fungsi variadik| variadik]] sehingga bisa menerima banyak argumen. Berikut contoh dalam bahasa [[Clojure]]:
[[Subrutin|Fungsi]] zip tersedia dalam beberapa [[bahasa pemrograman]] dan biasa disebut <code>zip</code>. Dalam dialek [[Lisp (bahasa pemrograman)|Lisp]], operasi zip bisa dilakukan dengan fungsi [[Map (fungsi tingkat tinggi)|<code>map</code>]] yang diterapkan terhadap daftar yang diinginkan. Fungsi <code>map</code> dalam Lisp bersifat [[Fungsi variadik| variadik]] sehingga bisa menerima banyak argumen. Berikut contoh dalam bahasa [[Clojure]]:<ref>[https://clojuredocs.org/clojure.core/map map]. ''ClojureDocs''.</ref>


<syntaxhighlight lang="clojure">
;; `bilangan` berisi daftar bilangan sampai tak hingga (0 1 2 3 ...)
(def bilangan (range))
(def puluhan [10 20 30])
(def namadepan "Milea")


Bahasa-bahasa seperti [[Python (bahasa pemrograman)|Python]] memberikan fungsi <code>zip()</code>. Python versi lawas (2.x) membolehkan pemetaan dengan <code>None</code> untuk menghasilkan efek yang sama. Fungsi <code>zip()</code> dengan <code>*</code> melakukan operasi unzip.
;; Untuk zip (0 1 2 3 ...) dan [10 20 30] ke dalam vector, panggil `map vector` terhadapnya; begitu pula untuk list
(map vector bilangan puluhan)          ; ⇒ ([0 10] [1 20] [2 30])
(map list bilangan puluhan)            ; ⇒ ((0 10) (1 20) (2 30))
(map str bilangan puluhan)              ; ⇒ ("010" "120" "230")
 
;; `map` memotong sampai barisan terpendek; perhatikan "e" dan "a" dari "Milea"
(map vector bilangan puluhan namadepan) ; ⇒ ([0 10 "M"] [1 20 "i"] [2 30 "l"])
(map str bilangan puluhan namadepan)    ; ⇒ ("010M" "120i" "230l")
 
;; Untuk unzip, terapkan `map vector` atau `map list`
(apply map list (map vector bilangan puluhan namadepan))
;; ⇒ ((0 1 2) (10 20 30) ("M" "i" "l"))
</syntaxhighlight>
 
Bahasa-bahasa seperti [[Python (bahasa pemrograman)|Python]] memberikan fungsi <code>zip()</code>. Python versi lawas (2.x) membolehkan pemetaan dengan <code>None</code> untuk menghasilkan efek yang sama.<ref>[https://docs.python.org/2/library/functions.html#map 2. Built-in Functions]. ''Python 2.7.18 documentation''.</ref> Fungsi <code>zip()</code> dengan <code>*</code> melakukan operasi unzip.<ref>[https://docs.python.org/3/library/functions.html#map Built-in Functions]. ''Python 3.11.3 documentation''.</ref>


Contoh berikut berlaku untuk Python 2.x. Terdapat perbedaan antara versi 2 dan 3 terhadap hasil dari fungsi <code>zip()</code>, yaitu sebagai daftar (versi 2) dan objek malas (versi 3).
Contoh berikut berlaku untuk Python 2.x. Terdapat perbedaan antara versi 2 dan 3 terhadap hasil dari fungsi <code>zip()</code>, yaitu sebagai daftar (versi 2) dan objek malas (versi 3).


<syntaxhighlight lang="pycon">
>>> bilangan = [1, 2, 3]
>>> puluhan = [10, 20, 30]
>>> namadepan = 'Milea'


[[Haskell]] memiliki metode untuk operasi zip, tetapi wajib menggunakan fungsi khusus untuk tiap [[ariti]] (misal <code>zip</code> untuk dua daftar, <code>zip3</code> untuk tiga daftar, dst.); selain itu, fungsi <code>unzip</code> dan <code>unzip3</code> juga tersedia untuk operasi unzip.
>>> zipped = zip(bilangan, puluhan)
>>> zipped
[(1, 10), (2, 20), (3, 30)]


>>> zip(*zipped) # unzip
[(1, 2, 3), (10, 20, 30)]
>>> zipped2 = zip(bilangan, puluhan, list(namadepan))
>>> zipped2 # zip, memangkas sampai yang paling pendek
[(1, 10, 'M'), (2, 20, 'i'), (3, 30, 'l')]
>>> zip(*zipped2) # unzip
[(1, 2, 3), (10, 20, 30), ('M', 'i', 'l')]
>>> # pemetaan dengan `None` tidak memangkasnya; dianggap usang dalam Python 3.
>>> map(None, bilangan, puluhan, list(namadepan))
[(1, 10, 'M'), (2, 20, 'i'), (3, 30, 'l'), (None, None, 'e'), (None, None, 'a')]
</syntaxhighlight>
[[Haskell]] memiliki metode untuk operasi zip, tetapi wajib menggunakan fungsi khusus untuk tiap [[ariti]] (misal <code>zip</code> untuk dua daftar, <code>zip3</code> untuk tiga daftar, dst.); selain itu, fungsi <code>unzip</code> dan <code>unzip3</code> juga tersedia untuk operasi unzip.<ref>[https://hackage.haskell.org/package/base-4.18.0.0/docs/Prelude.html#v:zip Prelude zip :: [a] -> [b] -> [(a, b)]]. ''Haskell Hackage''.</ref>
<syntaxhighlight lang="haskell">
-- nums berisi daftar bilangan sampai tak hingga [1, 2, 3, ...]
bilangan = [1..]
puluhan = [10, 20, 30]
namadepan = "Milea"
zip bilangan puluhan
-- ⇒ [(1,10), (2,20), (3,30)] — zip, memangkas daftar tak hingga
unzip $ zip bilangan puluhan
-- ⇒ ([1,2,3], [10,20,30]) — unzip
zip3 bilangan puluhan namadepan
-- ⇒ [(1,10,'M'), (2,20,'i'), (3,30,'l')] — zip, memangkas
unzip3 $ zip3 bilangan puluhan namadepan
-- ⇒ ([1,2,3], [10,20,30], "Mil") — unzip
</syntaxhighlight>


== Perbandingan bahasa ==
== Perbandingan bahasa ==
Berikut daftar bahasa yang mendukung operasi zip:
Berikut daftar bahasa yang mendukung operasi zip:


{| class="wikitable"
|+ Zip dalam beragam bahasa
|-
! scope="col" | Bahasa
! scope="col" | Zip
! scope="col" | Zip 3 daftar
! scope="col" | Zip ''n'' daftar
! scope="col" | Catatan
|-
! scope="row" | [[Chapel (bahasa pemrograman)|Chapel]]
|
|
|
| Ukuran tiap iterator wajib sama persis.<ref>[https://chapel-lang.org/docs/language/spec/statements.html#zippered-iteration Zippered Iteration Statements]. ''Chapel Documentation 1.30''.</ref>
|-
! scope="row" | [[Clojure]]
|
|
|
| Berhenti setelah mencapai panjang daftar terpendek.
|-
! scope="row" | [[Common Lisp]]
|
|
|
| Berhenti setelah mencapai panjang daftar terpendek.
|-
! scope="row" | [[D (bahasa pemrograman)|D]]
|
|
|
| Kebijakan berhenti bawaannya adalah yang terpendek, tetapi bisa disetel menjadi terpendek, terpanjang, atau wajib sama ukurannya.<ref>[https://dlang.org/phobos/std_range.html#zip std.range]. ''D Programming Language''.</ref> Bentuk kedua adalah contoh dari [[Uniform Function Call Syntax|UFCS]].
|-
! scope="row" | [[F Sharp (bahasa pemrograman)|F#]]
|
|
|
|
|-
! scope="row" | [[Haskell]]
|
|
|
|  untuk ''n'' > 3 tersedia dalam modul . Berhenti setelah mencapai panjang daftar terpendek.
|-
! scope="row" | [[Python (bahasa pemrograman)|Python]]
|
|
|
|  dan  (3.x) berhenti setelah mencapai panjang daftar terpendek, sedangkan  (2.x) dan  (3.x) memanjangkan daftar yang lebih pendek dengan isian .
|-
! scope="row" | [[Ruby (bahasa pemrograman)|Ruby]]
|
|
|
| Hasilnya sepanjang <code>daftar1</code> (yang dikenai fungsi zip). Nilai  akan dipakai untuk mengisi nilai yang kosong.<ref>[https://ruby-doc.org/core-3.1.0/Array.html#method-i-zip Class: Array (Ruby 3.1.0)].</ref>
|-
! scope="row" | [[Scala (bahasa pemrograman)|Scala]]
|
|
|
| Berhenti setelah mencapai panjang daftar terpendek.<ref>[https://www.scala-lang.org/api/current/scala/collection/IterableOps.html#zip[B](that:scala.collection.IterableOnce[B]):CC[([email protected],B)] scala.collection.IterableOps]. ''Scala Standard Library 2.13.10''.</ref>
|}
{| class="wikitable"
|+ Unzip dalam beragam bahasa
|-
! scope="col" | Bahasa
! scope="col" | Unzip
! scope="col" | Unzip 3 rangkap
! scope="col" | Unzip ''n'' rangkap
! scope="col" | Catatan
|-
! scope="row" | [[Clojure]]
|
|
|
|
|-
! scope="row" | [[Common Lisp]]
|
|
|
|
|-
! scope="row" | [[F Sharp (bahasa pemrograman)|F#]]
|
|
|
|
|-
! scope="row" | [[Haskell]]
|
|
|
|  untuk ''n'' > 3 tersedia dalam modul .
|-
! scope="row" | [[Python (bahasa pemrograman)|Python]]
|
|
|
|
|}


== Lihat pula ==
== Lihat pula ==
Baris 50: Baris 214:


== Referensi ==
== Referensi ==
 
<references />
 


== Sumber dan atribusi ==
== Sumber dan atribusi ==


Konten artikel ini diadaptasi dari [https://id.wikipedia.org/w/index.php?title=Zip+%28ilmu+komputer%29&oldid=27836784 Wikipedia bahasa Indonesia], revisi 27836784 (2025-09-18T00:47:47Z), yang tersedia berdasarkan lisensi Creative Commons Atribusi-BerbagiSerupa (CC BY-SA). Mohon gunakan konten ini secara bijak serta sesuai dengan ketentuan lisensi yang berlaku.
Konten artikel ini diadaptasi dari [https://id.wikipedia.org/w/index.php?title=Zip+%28ilmu+komputer%29&oldid=27836784 Wikipedia bahasa Indonesia], revisi 27836784 (2025-09-18T00:47:47Z), yang tersedia berdasarkan lisensi Creative Commons Atribusi-BerbagiSerupa (CC BY-SA). Mohon gunakan konten ini secara bijak serta sesuai dengan ketentuan lisensi yang berlaku.
<!-- WIKI_UNISSULA_PRESENTATION_V4 -->

Revisi terkini sejak 23 Agustus 2026 13.58

Dalam ilmu komputer, zip adalah fungsi yang memetakan rangkap dari barisan menjadi barisan dari rangkap. Nama zip berasal dari bahasa Inggris zipping atau zipper (ritsleting) yang secara selang-seling menggabungkan dua barisan yang terpisah. Inversi fungsi ini disebut unzip.

Contoh

Misalkan ada tiga kata ia, tuk, dan palu (2, 3, dan 4 karakter). Misalkan pula menandakan jumlah karakter terbanyak dari ketiganya, yaitu =4 (kata palu). Hasil operasi zip terhadap ia, tuk, dan palu adalah barisan berisi 4 rangkap berikut:

(i,t,p),(a,u,a),(#,k,l),(#,#,u)

dengan adalah simbol di luar alfabet yang awalnya dipakai.

Pada bahasa pemrograman tertentu seperti Haskell, fungsi ini hanya mengembalikan sebanyak jumlah karakter terpendek, yaitu =2 (kata ia):

<syntaxhighlight lang="haskell"> zip3 "ia" "tuk" "palu" -- [('i','t','p'),('a','u','a')] </syntaxhighlight>

Definisi

Misalkan Σ adalah alfabet dan adalah simbol di luar Σ.

Misalkan adalah kata (barisan berhingga) yang tersusun dari anggota Σ. Misalkan pula adalah panjang maksimum kata, yaitu maksimum dari

Hasil operasi zip dari kata-kata tersebut adalah barisan berhingga dari rangkap- yang disusun dari anggota , dengan kata lain anggota dari :

(x1,y1,z1,,(x2,y2,z2,),,(x,y,z,),

dengan adalah untuk dan adalah tiap kata.

Operasi zip terhadap disimbolkan sebagai atau . Inversi operasi zip disimbolkan sebagai .

Variasi operasi zip yang hanya mengembalikan dengan panjang minimum kata bisa didefinisikan sebagai berikut:

(x1,y1,z1,,(x2,y2,z2,),,(x_,y_,z_,)

dengan _ adalah panjang minimum dari kata-kata yang diberikan. Variasi ini menghindari anggota tambahan , tetapi menghapus informasi tentang barisan masukan setelah ke-_.

Dalam bahasa pemrograman

Fungsi zip tersedia dalam beberapa bahasa pemrograman dan biasa disebut zip. Dalam dialek Lisp, operasi zip bisa dilakukan dengan fungsi map yang diterapkan terhadap daftar yang diinginkan. Fungsi map dalam Lisp bersifat variadik sehingga bisa menerima banyak argumen. Berikut contoh dalam bahasa Clojure:[1]

<syntaxhighlight lang="clojure">

`bilangan` berisi daftar bilangan sampai tak hingga (0 1 2 3 ...)

(def bilangan (range)) (def puluhan [10 20 30]) (def namadepan "Milea")

Untuk zip (0 1 2 3 ...) dan [10 20 30] ke dalam vector, panggil `map vector` terhadapnya; begitu pula untuk list

(map vector bilangan puluhan)  ; ⇒ ([0 10] [1 20] [2 30]) (map list bilangan puluhan)  ; ⇒ ((0 10) (1 20) (2 30)) (map str bilangan puluhan)  ; ⇒ ("010" "120" "230")

`map` memotong sampai barisan terpendek; perhatikan "e" dan "a" dari "Milea"

(map vector bilangan puluhan namadepan) ; ⇒ ([0 10 "M"] [1 20 "i"] [2 30 "l"]) (map str bilangan puluhan namadepan)  ; ⇒ ("010M" "120i" "230l")

Untuk unzip, terapkan `map vector` atau `map list`

(apply map list (map vector bilangan puluhan namadepan))

⇒ ((0 1 2) (10 20 30) ("M" "i" "l"))

</syntaxhighlight>

Bahasa-bahasa seperti Python memberikan fungsi zip(). Python versi lawas (2.x) membolehkan pemetaan dengan None untuk menghasilkan efek yang sama.[2] Fungsi zip() dengan * melakukan operasi unzip.[3]

Contoh berikut berlaku untuk Python 2.x. Terdapat perbedaan antara versi 2 dan 3 terhadap hasil dari fungsi zip(), yaitu sebagai daftar (versi 2) dan objek malas (versi 3).

<syntaxhighlight lang="pycon"> >>> bilangan = [1, 2, 3] >>> puluhan = [10, 20, 30] >>> namadepan = 'Milea'

>>> zipped = zip(bilangan, puluhan) >>> zipped [(1, 10), (2, 20), (3, 30)]

>>> zip(*zipped) # unzip [(1, 2, 3), (10, 20, 30)]

>>> zipped2 = zip(bilangan, puluhan, list(namadepan)) >>> zipped2 # zip, memangkas sampai yang paling pendek [(1, 10, 'M'), (2, 20, 'i'), (3, 30, 'l')] >>> zip(*zipped2) # unzip [(1, 2, 3), (10, 20, 30), ('M', 'i', 'l')]

>>> # pemetaan dengan `None` tidak memangkasnya; dianggap usang dalam Python 3. >>> map(None, bilangan, puluhan, list(namadepan)) [(1, 10, 'M'), (2, 20, 'i'), (3, 30, 'l'), (None, None, 'e'), (None, None, 'a')] </syntaxhighlight>

Haskell memiliki metode untuk operasi zip, tetapi wajib menggunakan fungsi khusus untuk tiap ariti (misal zip untuk dua daftar, zip3 untuk tiga daftar, dst.); selain itu, fungsi unzip dan unzip3 juga tersedia untuk operasi unzip.[4]

<syntaxhighlight lang="haskell"> -- nums berisi daftar bilangan sampai tak hingga [1, 2, 3, ...] bilangan = [1..] puluhan = [10, 20, 30] namadepan = "Milea"

zip bilangan puluhan -- ⇒ [(1,10), (2,20), (3,30)] — zip, memangkas daftar tak hingga unzip $ zip bilangan puluhan -- ⇒ ([1,2,3], [10,20,30]) — unzip

zip3 bilangan puluhan namadepan -- ⇒ [(1,10,'M'), (2,20,'i'), (3,30,'l')] — zip, memangkas unzip3 $ zip3 bilangan puluhan namadepan -- ⇒ ([1,2,3], [10,20,30], "Mil") — unzip </syntaxhighlight>

Perbandingan bahasa

Berikut daftar bahasa yang mendukung operasi zip:

Zip dalam beragam bahasa
Bahasa Zip Zip 3 daftar Zip n daftar Catatan
Chapel Ukuran tiap iterator wajib sama persis.[5]
Clojure Berhenti setelah mencapai panjang daftar terpendek.
Common Lisp Berhenti setelah mencapai panjang daftar terpendek.
D Kebijakan berhenti bawaannya adalah yang terpendek, tetapi bisa disetel menjadi terpendek, terpanjang, atau wajib sama ukurannya.[6] Bentuk kedua adalah contoh dari UFCS.
F#
Haskell untuk n > 3 tersedia dalam modul . Berhenti setelah mencapai panjang daftar terpendek.
Python dan (3.x) berhenti setelah mencapai panjang daftar terpendek, sedangkan (2.x) dan (3.x) memanjangkan daftar yang lebih pendek dengan isian .
Ruby Hasilnya sepanjang daftar1 (yang dikenai fungsi zip). Nilai akan dipakai untuk mengisi nilai yang kosong.[7]
Scala Berhenti setelah mencapai panjang daftar terpendek.[8]
Unzip dalam beragam bahasa
Bahasa Unzip Unzip 3 rangkap Unzip n rangkap Catatan
Clojure
Common Lisp
F#
Haskell untuk n > 3 tersedia dalam modul .
Python

Lihat pula

Referensi

  1. map. ClojureDocs.
  2. 2. Built-in Functions. Python 2.7.18 documentation.
  3. Built-in Functions. Python 3.11.3 documentation.
  4. Prelude zip :: [a -> [b] -> [(a, b)]]. Haskell Hackage.
  5. Zippered Iteration Statements. Chapel Documentation 1.30.
  6. std.range. D Programming Language.
  7. Class: Array (Ruby 3.1.0).
  8. [B(that:scala.collection.IterableOnce[B]):CC[([email protected],B)] scala.collection.IterableOps]. Scala Standard Library 2.13.10.

Sumber dan atribusi

Konten artikel ini diadaptasi dari Wikipedia bahasa Indonesia, revisi 27836784 (2025-09-18T00:47:47Z), yang tersedia berdasarkan lisensi Creative Commons Atribusi-BerbagiSerupa (CC BY-SA). Mohon gunakan konten ini secara bijak serta sesuai dengan ketentuan lisensi yang berlaku.