gpt4 book ai didi

c# - 键值对列表

转载 作者:IT王子 更新时间:2023-10-29 04:07:35 29 4
gpt4 key购买 nike

我有一个包含以下元素的列表:

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

当变量=3时->我希望返回值为A,D

当变量=11时->返回值为A,D,F

当 2 -> 返回值是 D

等等。

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

如何得到对应的Key(A,D,F)?

最佳答案

使用 this question 中的子集 方法之一

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);

编辑

一个完整的控制台应用程序:

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;
}
}
}
}

关于c# - 键值对列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18801466/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com