我一直在尝试对排列在简单列表中的项目进行排列,我已使用以下代码从question中进行排序,但当序列的大小变得非常大时,它非常慢。在列表中排列项目
static IEnumerable<IEnumerable<T>>
GetPermutations<T>(IEnumerable<T> list, int length)
{
if (length == 1) return list.Select(t => new T[] { t });
return GetPermutations(list, length - 1)
.SelectMany(t => list.Where(e => !t.Contains(e)),
(t1, t2) => t1.Concat(new T[] { t2 }));
}
例如,当输出的长度需要是大的,则此方法需要很长的时间被执行。
这个问题的一个例子是,我们有25个字母,我们想知道所有可能的5租客长单词,我们可以与他们产生。
有没有其他方法可以比这个更快运行?
对此问题的接受答案是否有效? LINQ几乎总是很慢。 – 2017-10-05 13:32:14
@someone“LINQ几乎总是很慢”Sais是谁?这完全取决于你如何迭代你的收藏,并且与linq per-sé无关。 – HimBromBeere
我没有说用linq编写快速代码是不可能的,但是没有linq的代码可能会更快。 – 2017-10-05 13:36:24