En aquest tema, explorarem com utilitzar LINQ (Language Integrated Query) en F#. LINQ és una poderosa característica de .NET que permet realitzar consultes sobre col·leccions de dades de manera declarativa. Tot i que LINQ és més conegut en el context de C#, també es pot utilitzar en F# amb algunes diferències sintàctiques.

Objectius d'Aprenentatge

  • Comprendre què és LINQ i com s'utilitza en F#.
  • Aprendre a realitzar operacions bàsiques de consulta amb LINQ.
  • Veure exemples pràctics d'ús de LINQ en F#.
  • Realitzar exercicis pràctics per reforçar els conceptes apresos.

Introducció a LINQ

LINQ permet realitzar operacions de consulta sobre col·leccions de dades com si estiguéssim utilitzant SQL. Les operacions de LINQ es poden aplicar a arrays, llistes, seqüències i altres col·leccions.

Exemple Bàsic de LINQ en F#

open System.Linq

let numbers = [| 1; 2; 3; 4; 5; 6; 7; 8; 9; 10 |]

let evenNumbers = 
    numbers
    |> Seq.filter (fun n -> n % 2 = 0)
    |> Seq.toArray

printfn "Even numbers: %A" evenNumbers

Explicació del Codi

  1. Importació del Mòdul LINQ: open System.Linq importa les funcions de LINQ.
  2. Definició de la Col·lecció: numbers és un array d'enters.
  3. Filtratge amb LINQ: Seq.filter s'utilitza per seleccionar només els números parells.
  4. Conversió a Array: Seq.toArray converteix la seqüència resultant en un array.
  5. Impressió del Resultat: printfn s'utilitza per imprimir els números parells.

Operacions Bàsiques amb LINQ

Selecció (Select)

let squares = 
    numbers
    |> Seq.map (fun n -> n * n)
    |> Seq.toArray

printfn "Squares: %A" squares

Filtratge (Where)

let greaterThanFive = 
    numbers
    |> Seq.filter (fun n -> n > 5)
    |> Seq.toArray

printfn "Numbers greater than five: %A" greaterThanFive

Ordenació (OrderBy)

let sortedNumbers = 
    numbers
    |> Seq.sort
    |> Seq.toArray

printfn "Sorted numbers: %A" sortedNumbers

Agrupació (GroupBy)

let groupedByEvenOdd = 
    numbers
    |> Seq.groupBy (fun n -> n % 2 = 0)
    |> Seq.map (fun (key, group) -> (key, Seq.toArray group))
    |> Seq.toArray

printfn "Grouped by even/odd: %A" groupedByEvenOdd

Exercicis Pràctics

Exercici 1: Filtrar i Ordenar

Descripció: Escriu una funció que filtri els números imparells d'una llista i els ordeni en ordre descendent.

Codi Inicial:

let filterAndSortDescending numbers =
    // Implementa la funció aquí
    []

let result = filterAndSortDescending [1; 3; 5; 2; 4; 6; 7; 8; 9; 10]
printfn "Result: %A" result

Solució:

let filterAndSortDescending numbers =
    numbers
    |> Seq.filter (fun n -> n % 2 <> 0)
    |> Seq.sortDescending
    |> Seq.toList

let result = filterAndSortDescending [1; 3; 5; 2; 4; 6; 7; 8; 9; 10]
printfn "Result: %A" result

Exercici 2: Agrupar per Longitud de Paraula

Descripció: Escriu una funció que agrupi una llista de paraules per la seva longitud.

Codi Inicial:

let groupByLength words =
    // Implementa la funció aquí
    []

let result = groupByLength ["apple"; "banana"; "cherry"; "date"; "fig"; "grape"]
printfn "Result: %A" result

Solució:

let groupByLength words =
    words
    |> Seq.groupBy (fun word -> word.Length)
    |> Seq.map (fun (key, group) -> (key, Seq.toList group))
    |> Seq.toList

let result = groupByLength ["apple"; "banana"; "cherry"; "date"; "fig"; "grape"]
printfn "Result: %A" result

Resum

En aquest tema, hem après com utilitzar LINQ en F# per realitzar operacions de consulta sobre col·leccions de dades. Hem vist exemples pràctics de selecció, filtratge, ordenació i agrupació. També hem realitzat exercicis pràctics per reforçar els conceptes apresos. LINQ és una eina poderosa que pot simplificar molt el treball amb col·leccions de dades en F#.

© Copyright 2024. Tots els drets reservats