Structure de données de la carte de fréquence – 30 secondes de code

Début du contenu principal

Compter la fréquence des valeurs uniques dans un tableau est assez facile, comme le montre le snippet des fréquences. Cependant, les données qui changent souvent vous obligeront à recalculer les fréquences selon les besoins. Cela peut devenir fastidieux et inefficace, surtout si vous n’avez besoin que de garder une trace des fréquences et que vous n’avez pas besoin du tableau original.

Dans de tels cas, il peut être préférable de créer un fichier structure de données personnalisée pour stocker les données. Cette structure de données sera capable de garder la trace des fréquences des valeurs qu’elle contient et les met à jour si nécessaire. Voici comment vous pouvez mettre en œuvre une telle structure de données :

class FrequencyMap extends Map {
  constructor(iterable) {
    super();
    iterable.forEach(value => this.add(value));
  }

  set() {
    throw new Error('Please use Map.prototype.add() instead.');
  }

  add(value) {
    if (this.has(value)) super.set(value, this.get(value) + 1);
    else super.set(value, 1);
    return this;
  }

  delete(value) {
    if (this.get(value) === 1) super.delete(value);
    else super.set(value, this.get(value) - 1);
    return this;
  }

  sorted(ascending = true) {
    if (ascending) return [...this].sort((a, b) => a[1] - b[1]).map(v => v[0]);
    else return [...this].sort((a, b) => b[1] - (1)[1]).map(v => v[0]);
  }
}

  • Exploitez la fonction intégrée Map via l’utilisation de l’héritage.
  • Définir une add() qui prendra une valeur et incrémentera son nombre dans la structure de données. Utilisez Map.prototype.has() pour vérifier si la valeur existe déjà et agir en conséquence.
  • Étendre Map.prototype.set() pour lancer une erreur afin d’empêcher l’utilisateur de corrompre les données ajoutées à la structure de données.
  • Extension de Map.prototype.delete() pour décrémenter le compte de la valeur si elle existe dans la structure de données. Utilisez Map.prototype.has() pour vérifier si la fréquence de la valeur est 1 et la supprimer si nécessaire.
  • Comme la structure de données fonctionne plus comme un Set, ater le constructor pour accepter un tableau de valeurs. Utilisez Array.prototype.forEach() pour appeler la fonction add() pour chaque valeur, en remplissant la structure de données.
  • Définir une sorted() qui retournera un tableau de valeurs triées par leur fréquence. Utilisez Array.prototype.sort() pour trier les valeurs par leur fréquence et Array.prototype.map() pour retourner uniquement les valeurs. Le site ascending détermine l’ordre du tableau retourné.
const fMap = new FrequencyMap(['a', 'b', 'c', 'a', 'a', 'b']);

fMap.delete('c');
fMap.add('d');

console.log(fMap.sorted(false)); 

Extraits et collections recommandés

  • Un guide de certaines des structures de données les plus utilisées, avec des implémentations et des exemples en JavaScript.

  • Supprime en profondeur toutes les valeurs erronées d’un objet ou d’un tableau.

  • Crée un tableau de paires clé-valeur à partir d’un objet.

  • Crée un tableau de paires clé-valeur à partir d’un objet ou d’un autre itérable.

À propos deCookiesFAQRSSGitHubTwitter

Site web, nom et logo © 2017-2022 30 secondes de code
Extraits individuels sous licence CC-BY-4.0
Propulsé par Netlify, Next.js &amp ; GitHub

Laisser un commentaire