Kurzusok
/
jq
jq
/
Feladatok
/
Madárszámlálás
Madárszámlálás

Madárszámlálás

Tanulófeladat

Bevezetés

Tömbök

A JSON a következőképpen definiálja a tömb fogalmát:

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 típusú JSON-értéket tartalmazhatnak. A tömbben lévő elemek nem feltétlenül azonos típusúak.

Tömbök létrehozása

A zárójelek segítségével elemeket gyűjthetsz egy tömbbe.

[1, 2, 3]

Egy stream elemeit úgy gyűjtheted tömbbe, hogy zárójelek közé zárod.

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

Méret

A length függvény egy tömb elemeinek számát adja vissza.

Indexelés és szeletelés

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

Egy tömb eleméhez zárójeles kifejezéssel férhetsz hozzá: a .[2] a harmadik elemet adja.

A negatív indexek a tömb végétől számolódnak visszafelé: a .[-1] az utolsó elemet adja, a .[-2] pedig az utolsó előttit.

A szelet a tömb egy részsorozata. A .[10:15] 5 elemet ad vissza a 10-es indextől kezdve, a záró index nem számít bele.

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

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

Iterálás

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

  • A map(expr) egy új tömböt ad vissza, amelyben az expr minden elemre egymás után alkalmazva van.

    [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 a függvény visszaadja az értéket; ha az eredmény hamis, akkor semmi nem adódik vissza, nem null, hanem tényleg semmi.

    Ha egy tömbre szeretnéd alkalmazni, kombináld a map-pal.

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

    Másik lehetőségként 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
    

Utasítások

Szenvedélyes madárfigyelő vagy, aki nyomon követi, hány madár járt a kertedben az elmúlt hét napban.

Öt részfeladatod van, és mindegyik a kertedbe látogató madarak számával foglalkozik.

1. Nézd meg, mennyi volt a számuk múlt héten

A madárszámokat JSON formátumban tárolod. Egy „fő” tömb heti számokat tartalmazó tömböket tárol. Minden heti szám egy hét egész számból álló tömb, a hét minden napjához egy szám. Az új heteket mindig a „fő” tömb végéhez fűzöd hozzá. Valósítsd meg azt a szűrőt, amely visszaadja a múlt heti számokat.

$ cat bird-counting-data.json
[
  ...,
  [0, 2, 5, 3, 7, 8, 4],
  [4, 5, 9, 10, 9, 4, 3]
]

$ jq -f bird-count.jq < bird-counting-data.json
{
  "last_week": [0, 2, 5, 3, 7, 8, 4],
  ...

2. Nézd meg, hány madár járt itt tegnap

Valósítsd meg a szűrőt, amely visszaadja, hány madár járt a kertedben tegnap. A madárszámok nap szerint vannak rendezve: az első elem a legrégebbi nap száma, az utolsó pedig a mai napé.

$ jq -f bird-count.jq < bird-counting-data.json
{
  ...
  "yesterday": 4,
  ...

3. Számold ki az összes látogató madár számát

Valósítsd meg a szűrőt, amely visszaadja, összesen hány madár járt a kertedben ezen a héten.

$ jq -f bird-count.jq < bird-counting-data.json
{
  ...
  "total": 44,
  ...

4. Számold ki a forgalmas napok számát

Van, amelyik nap forgalmasabb a többinél. Forgalmas nap az, amikor öt vagy több madár járt a kertedben. Valósítsd meg a szűrőt, amely visszaadja az e heti forgalmas napok számát.

$ jq -f bird-count.jq < bird-counting-data.json
{
  ...
  "busy_days": 4,
  ...

5. Nézd meg, volt-e olyan nap, amikor egyetlen madár sem járt itt

Valósítsd meg azt a szűrőt, amely true-t ad vissza, ha ezen a héten volt olyan nap, amikor nulla madár járt a kertedben; egyébként pedig false-t ad vissza.

$ jq -f bird-count.jq < bird-counting-data.json
{
  ...
  "has_day_without_birds": false
}
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
jq Exercism

Készen állsz elkezdeni a(z) Madárszámlálás feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) jq nyelvet 12 fogalom75 feladat segítségével, valódi emberi mentorálással, mindez ingyen.