Absoluta mente en blanco en esto. Ha sido uno de esos días. Pero he estado buscando una solución para obtener combinaciones únicas de una lista de artículos de cierta duración. por ejemplo, dada una lista [a, b, c] y una longitud de 2, devolverá [a, b] [a, c] [b, c] pero no [b, a] [c, a] [c , b]Combinaciones únicas de la lista
Para esto encontré varias piezas de código, pero ninguna que parece encajar. El siguiente código parecía mejor ajuste y he estado tratando de alterarla para mis necesidades:
// Returns an enumeration of enumerators, one for each permutation
// of the input.
public static IEnumerable<IEnumerable<T>> Permute<T>(IEnumerable<T> list, int count)
{
if (count == 0)
{
yield return new T[0];
}
else
{
int startingElementIndex = 0;
foreach (T startingElement in list)
{
IEnumerable<T> remainingItems = AllExcept(list, startingElementIndex);
foreach (IEnumerable<T> permutationOfRemainder in Permute(remainingItems, count - 1))
{
yield return Concat<T>(
new T[] { startingElement },
permutationOfRemainder);
}
startingElementIndex += 1;
}
}
}
// Enumerates over contents of both lists.
public static IEnumerable<T> Concat<T>(IEnumerable<T> a, IEnumerable<T> b)
{
foreach (T item in a) { yield return item; }
foreach (T item in b) { yield return item; }
}
// Enumerates over all items in the input, skipping over the item
// with the specified offset.
public static IEnumerable<T> AllExcept<T>(IEnumerable<T> input, int indexToSkip)
{
int index = 0;
foreach (T item in input)
{
if (index != indexToSkip) yield return item;
index += 1;
}
}
Esto hace lo que se supone que debe hacer, pero devuelve todas las permutaciones, independientemente de ellas es única. Intenté entender qué pieza, si corresponde, de este código cambiar para obtener los valores únicos. ¿O es la mejor manera de implementar esta funcionalidad?
¿Los artículos de la lista son únicos? Es decir. ¿podría tener una lista [a, a, b, c]? –
Terminología: lo que estás buscando se llama "combinaciones", es decir, las diferentes selecciones desordenadas que puedes hacer, donde las permutaciones son las diferentes selecciones ordenadas. –