我正在为我需要编写的算法而苦苦挣扎。我正在使用 C#。
假设我有一个 List<Bag>
我有一个 List<Lunch>
.
我需要编写一个算法来枚举所有包中午餐的所有排列。
例如,假设有 3 份午餐和 2 个袋子:
// Permutation 1
Bag 1, Lunch 1
Bag 2, Lunch 1
// Permutation 2
Bag 1, Lunch 1
Bag 2, Lunch 2
// Permutation 3
Bag 1, Lunch 1
Bag 2, Lunch 3
// Permutation 4
Bag 1, Lunch 2
Bag 2, Lunch 1
// Permutation 5
Bag 1, Lunch 2
Bag 2, Lunch 2
// Permutation 6
Bag 1, Lunch 2
Bag 2, Lunch 3
// Permutation 7
Bag 1, Lunch 3
Bag 2, Lunch 1
// Permutation 8
Bag 1, Lunch 3
Bag 2, Lunch 2
// Permutation 9
Bag 1, Lunch 3
Bag 2, Lunch 3
两个排列 Bag 1 Lunch 1 and Bag 2 Lunch 2
和 Bag 1 Lunch 2 and Bag 2 Lunch 1
不同是因为袋子的容量不同,因此它们都需要被枚举。
袋子和午餐的数量可以是任意数量。
我创建了一个名为 BagLunch
的类其中包含一个袋子和一对午餐。我上面给出的示例列表将存储在 List<BagLunch>
中.
谢谢。
最佳答案
在 LINQ 中使用交叉连接:
var qry = from bag in bags
from lunch in lunches
select new BagLunch
{ Bag=bag, Lunch=lunch};
var baglunches = qry.ToList();
编辑:
您需要修改 select 子句以处理 BagLunch
类的结构。
关于c# - C# 中的置换算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9168269/