Kurzusok
/
jq
jq
/
Tanterv
/
Tömbök
Tö

Tömbök ebben a kurzusban: jq

5 feladat

A(z) Tömbök fogalomról

A JSON a tömböt így definiálja:

A tömb értékek rendezett gyűjteménye. A tömb [ bal szögletes zárójellel kezdődik és ] jobb szögletes zárójellel végződik. Az értékeket , vessző választja el.

A tömbök nulla vagy több bármilyen fajta JSON-értéket tartalmazhatnak. A tömb elemeinek nem kell mind azonos típusúnak lenniük.

Tömbök létrehozása

Zárójelekkel elemeket gyűjthetsz tömbbe.

[1, 2, 3]

A stream elemeit úgy foglalhatod tömbbe, hogy zárójelek közé teszed.

range(5)     # => a stream of 5 numbers
[range(5)]   # => the array [0, 1, 2, 3, 4]

Méret

A length függvény visszaadja a tömb elemeinek számát.

Indexelés és szeletelés

A tömbök indexelése nullától kezdődik.

Egy elem kiolvasása egy tömbből zárójeles kifejezéssel történik: .[2] a harmadik elemet adja vissza.

A negatív indexek a tömb végétől számolnak visszafelé: .[-1] az utolsó elemet adja vissza; .[-2] az utolsó előtti elemet.

A szelet a tömb egy részsorozata. .[10:15] 5 elemet ad vissza a 10-es indextől kezdve; a záró index nincs benne.

Van néhány kényelmi függvény:

  • A first az első elemet adja vissza.
  • A last az utolsó elemet adja vissza.
  • A nth(n) az n indexű elemet adja vissza.

Átalakítás elemek streamjévé

Vannak helyzetek, amikor egy tömb elemeit egyenként szeretnéd streamelni. Erre a .[] szolgál.

Tegyük fel, hogy a tömbben lévő stringek hosszaiból szeretnénk egy streamet.

["a", "be", "cat", "door"] | length        # => 4 -- the number of elements in the array
["a", "be", "cat", "door"] | .[] | length  # => 1, 2, 3, 4 -- the lengths of each element

Az üres zárójelek az előző kifejezés mellé helyezhetők, elhagyva a pipe operátort.

["a", "be", "cat", "door"][] | length      # => 1, 2, 3, 4 -- the lengths of each element
# ........................^^

Összefűzés és kivonás

A tömbök összefűzéséhez használd a + operátort.

[1, 2, 3] + [4, 5]          # => [1, 2, 3, 4, 5]

A - operátor eltávolítja a jobb oldali tömbben lévő elemeket a bal oldali tömbből.

[range(10)] - [2, 4, 6]     # => [0, 1, 3, 5, 7, 8, 9]

Iterálás

A jq számos függvényt kínál a gyakori iterációs műveletek lefedésére:

  • A map(expr) egy új tömböt ad vissza, amelyben az expr minden elemre egyenként alkalmazódik.

    [1, 2, 3] | map(. * 10)    # => [10, 20, 30]
    
    
  • A select(expr) egy olyan függvény, amely az expr-t egy egyetlen értékre alkalmazza; ha a kifejezés eredménye igaz, akkor az érték visszaadódik; ha az eredmény hamis, semmi nem adódik vissza, nem null, hanem ténylegesen semmi.

    Ahhoz, hogy ezt egy tömbre alkalmazd, kombináld a map-pal.

    [range(10)] | map(select(. % 2 == 0))    # => [0, 2, 4, 6, 8]
    

    Vagy alkalmazd a select-et egy streamre, és gyűjtsd össze az eredményeket.

    [range(10) | select(. % 2 == 0)]    # => [0, 2, 4, 6, 8]
    
  • Az any(condition) és az all(condition) logikai értéket ad vissza arról, hogy a tömbben lévő elemek közül bármelyik/mindegyik teljesíti-e a feltételt.

    [1, 2, 3, 4] | any(. > 4)    # false
    [1, 2, 3, 4] | any(. >= 4)   # true
    
    [1, 2, 3, 4] | all(. >= 4)   # false
    [1, 2, 3, 4] | all(. <= 4)   # true
    

Tartalmazás

Az index segítségével tesztelhetjük, hogy egy tömb tartalmaz-e egy elemet. Ez a függvény visszaadja az adott elem indexét, ha benne van a tömbben; egyébként a függvény null-t ad vissza.

["carrots", "beef", "potatoes"] | index("beef")    # => 1
["carrots", "beef", "potatoes"] | index("bees")    # => null

Van egy fordított függvény, amelynek neve IN (igen, csupa nagybetűvel). Az IN sajátossága, hogy argumentuma nem tömb, hanem egy stream.

"beef" | IN(["carrots", "beef", "potatoes"][])    # => true
"bees" | IN(["carrots", "beef", "potatoes"][])    # => false

Egyéb függvények (a részletekért lásd a kézikönyvet)

  • A Rubyban van egy hasznos each_with_index metódus, amely az elem értékét az indexével párosítja. A Pythonban enumerate a neve. A jq-ban van valami hasonló, to_entries néven. Ez a tömböt {key: index, value: value} objektumok tömbjévé alakítja.

    [11, 22, 33, 44] | to_entries
    # => [{key: 0, value: 11}, {key: 1, value: 22}, {key: 2, value: 33}, {key: 3, value: 44}]
    
  • sort és sort_by

  • group_by

  • min, max, min_by, max_by

  • unique, unique_by

  • flatten

Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg

Tanuld meg a(z) Tömbök fogalmat

A gyakorlás zárolva

Oldj fel még 8 feladatot, hogy gyakorolhasd a(z) Tömbök fogalmat