我将如何从 List<string>
中生成一个包含所有单词组合的列表,直到一定长度?来源?
例如,我有一个 List<string>
我需要将 10,600 多个单词转换为 List<List<string>>
,但是,子列表只需要包含最多并包括给定最大长度的组合,对于这个例子,我会说 3。
我不关心单词在子列表中出现的顺序。例如,我只需要列表中的以下一项:
"laptop", "computer", "reviews"
"laptop", "reviews", "computer"
"computer", "laptop", "reviews"
"computer" "reviews", "laptop"
"reviews", "computer", "laptop"
"reviews", "laptop", "computer"
考虑到我需要生成大量组合,这是否可能?
非常感谢任何帮助。
最佳答案
首先,我不确定您是否真的想要生成这么大的列表。如果你真的这样做,那么我建议你考虑使用iterators对于惰性列表生成而不是这个巨大的列表:
static void Main()
{
var words = new List<string> {"w1", "w2", "w3", "w4", "w5", "w6", "w7"};
foreach (var list in Generate(words, 3))
{
Console.WriteLine(string.Join(", ", list));
}
}
static IEnumerable<List<string>> Generate(List<string> words, int length, int ix = 0, int[] indexes = null)
{
indexes = indexes ?? Enumerable.Range(0, length).ToArray();
if (ix > 0)
yield return indexes.Take(ix).Select(x => words[x]).ToList();
if (ix > length)
yield break;
if (ix == length)
{
yield return indexes.Select(x => words[x]).ToList();
}
else
{
for (int jx = ix > 0 ? indexes[ix-1]+1 : 0; jx < words.Count; jx++)
{
indexes[ix] = jx;
foreach (var list in Generate(words, length, ix + 1, indexes))
yield return list;
}
}
}
关于c# - 从 List<string> of words 生成最多 X 长度的所有组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11474377/