Fonctions spécifiques
Fonctions propres à un type
Module Map
Map
Ce module comporte quelques fonctions spécifiques qui sont intéressantes à connaître :
Map.change
: modification intelligente
Map.change
: modification intelligenteSignature : Map.change key (f: 'T option -> 'T option) table
Selon la fonction f
passée en argument, on peut : → Ajouter, modifier ou supprimer l'élément d'une clé donnée
Entrée
Renvoie None
Renvoie Some newVal
None
(Élément absent)
Ignore cette clé
Ajoute l'élément (key, newVal)
≡ Map.add key newVal table
Some value
(Élément existant)
Supprime la clé
≡ Map.remove key table
Passe la valeur à newVal
≡ Map.add key newVal table
containsKey
vs exists
vs filter
containsKey
vs exists
vs filter
Module Seq
Seq
Ce module comporte une fonction spécifique très intéressante :
Seq.cache
Seq.cache
Le principe d'une séquence (aka énumérable) est qu'elle est reconstruit à chaque fois qu'elle est parcourue. Cette reconstruction peut être coûteuse. Un algorithme parcourant (même partiellement) plusieurs fois une séquence invariante peut être optimisé en mettant en cache cette séquence au moyen de la fonction Seq.cache
.
Signature : Seq.cache: source: 'T seq -> 'T seq
La mise en cache est optimisée en étant différée et en ne se faisant que sur les éléments parcourus.
Type string
string
Pour manipuler les caractères d'une chaîne, plusieurs options sont possibles.
Module Seq
Seq
Le type string
implémente Seq<char>
(i.e. System.Collections.Generic.IEnumerable<char>
).
→ On peut donc utiliser les fonctions du module Seq
.
Module Array
Array
La méthode d'instance ToCharArray()
permet de renvoyer les caractères d'une chaîne sous la forme d'un char array
.
→ On peut donc utiliser les fonctions du module Array
.
Module String
String
Il existe également un module String
(venant de FSharp.Core
) proposant quelques fonctions intéressantes car + performantes individuellement que celles de Seq
et Array
:
→ Module (FSharp.Core.)String
(≠ System.String
)
→ Propose quelques fonctions similaires à celles de Seq
en + performantes :
Exemples :
☝️ Note : lorsque l'on a fait un open System
, String
représente 3 choses que le compilateur arrive à différencier :
Les constructeurs
(new) String(...)
.String.
donne accès à l'ensemble des fonctions du moduleString
(en camelCase) et des méthodes statiques deSystem.String
(en PascalCase).
Array2D
Au lieu de fonctionner avec une imbrication de collections à N niveaux, F# propose des tableaux multidimensionnels (également appelés matrices). En revanche, pour les créer, il n'y a pas de syntaxe spécifique, il faut passer par une fonction de création. Voyons cela pour les tableaux de dimension 2.
Type
Le type d'un tableau à 2 dimensions est 't[,]
mais l'IntelliSense donne parfois juste 't array
qui est moins précis, n'indiquant plus le nombre de dimensions.
Création
array2D
permet de créer un tableau à 2 dimensions à partir d'une collection de collections ayant toutes la même longueur.
Array2D.init
permet de générer un tableau en spécifiant :
→ Sa longueur selon les 2 dimensions N et P
→ Une fonction générant l'élément aux deux indices spécifiés.
Accès par indices
Longueurs
Array2D.length1
et Array2D.length2
renvoient le nombre de lignes et de colonnes.
Slicing
Syntaxe permettant de ne prendre qu'une tranche horizontale et/ou verticale au moyen de l'opérateur ..
et du caractère wilcard *
pour prendre tous les indices
Autres utilisations
Dernière mise à jour
Cet article vous a-t-il été utile ?