Maison > développement back-end > C++ > Comment trouver efficacement toutes les combinaisons d'éléments de tableau en C# ?

Comment trouver efficacement toutes les combinaisons d'éléments de tableau en C# ?

Linda Hamilton
Libérer: 2025-01-19 23:07:08
original
680 Les gens l'ont consulté

How to Efficiently Find All Combinations of Array Elements in C#?

Trouver efficacement toutes les combinaisons d'éléments de tableau C#

Lorsque vous travaillez avec des éléments de tableau, il est utile d'extraire toutes les combinaisons possibles d'éléments. Cette tâche apparaît souvent dans des domaines tels que l'analyse de données et l'optimisation combinatoire.

Permutations et combinaisons d'éléments répétés

Supposons qu'il existe un tableau [1, 2, 3, 4]. Pour trouver toutes les combinaisons de longueur 2 avec des éléments répétés, vous pouvez utiliser la fonction suivante :

static IEnumerable<IEnumerable<T>> GetPermutationsWithRept<T>(IEnumerable<T> list, int length)
{
    if (length == 1) return list.Select(t => new T[1] { t });
    return GetPermutationsWithRept(list, length - 1)
        .SelectMany(t => list, (t1, t2) => t1.Concat(new T[1] { t2 }));
}
Copier après la connexion

Cette fonction considère les combinaisons contenant des éléments répétés, tels que [1, 1], [1, 2], etc.

Permutation et combinaison (hors éléments répétés)

Pour exclure les éléments en double, utilisez la fonction GetPermutations :

static IEnumerable<IEnumerable<T>> GetPermutations<T>(IEnumerable<T> list, int length)
{
    if (length == 1) return list.Select(t => new T[1] { t });
    return GetPermutations(list, length - 1)
        .SelectMany(t => list.Where(o => !t.Contains(o)), (t1, t2) => t1.Concat(new T[1] { t2 }));
}
Copier après la connexion

Cette fonction garantit des combinaisons telles que [1, 2], [1, 3] et [2, 3], mais pas [1, 1].

Combinaison K avec éléments répétés

Pensez à trouver des combinaisons de longueur 2 avec des éléments répétés, permettant plusieurs occurrences de l'élément :

static IEnumerable<IEnumerable<T>> GetKCombsWithRept<T>(IEnumerable<T> list, int length) where T : IComparable
{
    if (length == 1) return list.Select(t => new T[1] { t });
    return GetKCombsWithRept(list, length - 1)
        .SelectMany(t => list.Where(o => o.CompareTo(t.Last()) >= 0), (t1, t2) => t1.Concat(new T[1] { t2 }));
}
Copier après la connexion

Cette fonction génère des combinaisons telles que [1, 1], [1, 2] et [2, 2].

Combinaison K (hors éléments répétés)

Pour les combinaisons sans éléments répétés :

static IEnumerable<IEnumerable<T>> GetKCombs<T>(IEnumerable<T> list, int length) where T : IComparable
{
    if (length == 1) return list.Select(t => new T[1] { t });
    return GetKCombs(list, length - 1)
        .SelectMany(t => list.Where(o => o.CompareTo(t.Last()) > 0), (t1, t2) => t1.Concat(new T[1] { t2 }));
}
Copier après la connexion

Cette fonction génère des combinaisons telles que [1, 2], [1, 3] et [2, 3].

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal