首页 / C# / c# – 如何根据提供的限制进行组合?
c# – 如何根据提供的限制进行组合?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 如何根据提供的限制进行组合?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1311字,纯文字阅读大概需要2分钟。
内容图文
我有一个数组如下
var x = new int[] { 1,2,3 };
并给出了限制
int limit=2;
我必须找到一个组合
1+2 = 3
1+3 = 4
2+3 = 5.
如果说数组
var x = new int[] { 1,2,3,4,5,6};
并给出了限制
int limit=3;
组合应该是
1+2+3 = 6
1+2+4 = 7
1+2+5 = 8
1+2+6 = 9
2+3+4 = 9
2+3+5 = 10
2+3+6 = 11
...........
............
等等
怎么办?
我的挫败感很糟糕
var x = new int[] {1,2,3};
int limit = 2;
var m = from a1 in x
from a2 in x
select new
{
P1 = a1 ,
P2 = a2,
P3 = a1+a2
};
解决方法:
不使用外部库的解决方案:
public static IEnumerable<IEnumerable<T>> Combinations<T>(IEnumerable<T> elements, int k)
{
return k == 0 ? new[] { new T[0] } :
elements.SelectMany((e, i) =>
Combinations(elements.Skip(i + 1),k - 1).Select(c => (new[] {e}).Concat(c)));
}
public static void Main()
{
var x = new int[] { 1, 2, 3, 4, 5, 6 };
var limit = 3;
IEnumerable<IEnumerable<int>> result = Combinations(x, limit);
foreach(var combi in result)
Console.WriteLine(String.Join("+", combi.Select(a=>a.ToString()).ToArray()) + "=" + combi.Sum());
Console.WriteLine("Total: " + result.Sum(c => c.Sum())); // 201
}
编辑:所有组合:
public static IEnumerable<IEnumerable<T>> AllCombinations<T>(IEnumerable<T> elements)
{
int length = elements.Count();
for(int k = 1; k<=length; k++){
var comb = Combinations(elements, k);
foreach (IEnumerable<T> c in comb)
yield return c;
}
}
内容总结
以上是互联网集市为您收集整理的c# – 如何根据提供的限制进行组合?全部内容,希望文章能够帮你解决c# – 如何根据提供的限制进行组合?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。
来源:【匿名】