returns remarks generate example c# arrays keyvaluepair

generate - remarks c#



Lista de pares de valores clave (1)

Tengo una lista con los siguientes elementos:

{[A,1] ; [B,0] ; [C,0] ; [D,2]; [E,0] ; [F,8]}

Cuando Variable = 3 -> quiero que el valor de retorno sea A, D

Cuando variable = 11 -> el valor de retorno sea A, D, F

cuando 2 -> devuelve el valor para ser D

y así.

int sum = myList.Sum(x => x.Value)

¿Cómo obtener la clave correspondiente (A, D, F)?


Usando uno de los métodos de subconjuntos en esta pregunta

var list = new List<KeyValuePair<string, int>>() { new KeyValuePair<string, int>("A", 1), new KeyValuePair<string, int>("B", 0), new KeyValuePair<string, int>("C", 0), new KeyValuePair<string, int>("D", 2), new KeyValuePair<string, int>("E", 8), }; int input = 11; var items = SubSets(list).FirstOrDefault(x => x.Sum(y => y.Value)==input);

EDITAR

una aplicación de consola completa:

using System; using System.Collections.Generic; using System.Linq; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { var list = new List<KeyValuePair<string, int>>() { new KeyValuePair<string, int>("A", 1), new KeyValuePair<string, int>("B", 2), new KeyValuePair<string, int>("C", 3), new KeyValuePair<string, int>("D", 4), new KeyValuePair<string, int>("E", 5), new KeyValuePair<string, int>("F", 6), }; int input = 12; var alternatives = list.SubSets().Where(x => x.Sum(y => y.Value) == input); foreach (var res in alternatives) { Console.WriteLine(String.Join(",", res.Select(x => x.Key))); } Console.WriteLine("END"); Console.ReadLine(); } } public static class Extenions { public static IEnumerable<IEnumerable<T>> SubSets<T>(this IEnumerable<T> enumerable) { List<T> list = enumerable.ToList(); ulong upper = (ulong)1 << list.Count; for (ulong i = 0; i < upper; i++) { List<T> l = new List<T>(list.Count); for (int j = 0; j < sizeof(ulong) * 8; j++) { if (((ulong)1 << j) >= upper) break; if (((i >> j) & 1) == 1) { l.Add(list[j]); } } yield return l; } } } }