有多个相关问题,但我正在寻找针对我的案例的解决方案。有一个(通常)14 个整数的数组。如何快速判断每个 int 是否恰好出现两次(即有 7 对)?取值范围从 1 到 35。这里的主要方面是性能。
作为参考,这是我目前的解决方案。它被编写为尽可能接近规范并且没有考虑性能,所以我确信可以大大改进:
var pairs = Array
.GroupBy (x => x)
.Where (x => x.Count () == 2)
.Select (x => x.ToList ())
.ToList ();
IsSevenPairs = pairs.Count == 7;
使用 Linq 是可选的。我不在乎如何,只要它快:)
编辑:在特殊情况下,int 出现 2n 次且 n > 1。在这种情况下,检查应该失败,即应该有 7 个不同的对。
编辑:结果 我用微小的修改测试了 Ani 和 Jon 的解决方案,并在目标应用程序的多个基准测试运行期间发现,Ani 在我的机器上的吞吐量大约是 Jon 的两倍(Win7-64 上的一些 Core 2 Duo)。生成整数数组所需的时间与相应检查的时间差不多,所以我对结果很满意。谢谢大家!