【发布时间】:2019-07-27 12:53:16
【问题描述】:
我在 C# 中有一些代码正是我喜欢做的:枚举数组中给定长度的所有组合(重复)。像这样:
public static IEnumerable<IEnumerable<int>> CombinationsWithRepition(IEnumerable<int> input, int length)
{
if (length <= 0)
yield return new List<int>();
else
{
foreach (int i in input)
foreach (IEnumerable<int> c in CombinationsWithRepition(input, length - 1))
{
List<int> list = new List<int>();
list.Add(i);
list.AddRange(c);
yield return list;
}
}
}
用法:
foreach (var c in CombinationsWithRepition(new int[] { 0, 1, 2 }, 2))
{
foreach (var x in c)
Console.Write(x + " : ");
Console.WriteLine("");
}
输出:
0 : 0
0 : 1
0 : 2
1 : 0
1 : 1
1 : 2
2 : 0
2 : 1
2 : 2
现在我想将它移植到 swift 5,但我失败了。我在网上搜索,但我只能找到没有重复的解决方案或创建庞大数组的解决方案。枚举整个事物的能力很重要(不作为数组或包含所有结果的列表输出)。我不知道如何将“yield”移植到 swift 代码。
这是我找到的最接近的: How do I return a sequence in Swift?
提前谢谢你
【问题讨论】:
标签: arrays swift find combinations enumeration