2

我一般是编程新手,我发现先在这里问是个好主意。

所以,假设我有大约 900 组 6 个数字存储在某个地方(也许在数组中?)。我希望每次生成一组随机的 6 个数字,与其他 900 不同。如果相同(与其他 900 核对),则不要接受它并生成一个新的。我想过使用数组,每次都和其他人一起检查新的集合,但我认为之前有 900 个数组有点“痛苦”。

任何想法,将不胜感激!谢谢!

4

1 回答 1

0

老实说,我无法想象你需要这个来完成的任务。)) 但是通常当您需要确保某种集合的唯一性时,您会使用哈希。

例如,假设我们有 900 个数组,其结构如下:

$arr1 = [n1, n2, n3, n4, n5, n6];
$arr2 = [m1, m2, m3, m4, m5, m6];
...

我们需要另一个数组,它不应该和这些数组一样。

我认为,解决方案是创建一个元结构,将这些数组与其哈希一起存储。就像是...

$arrayCollection = array(
  hash($arr1) => $arr1,
  hash($arr2) => $arr2,
  ...
);

然后,当创建一个新集合时,我也会生成它的散列 - 并检查我的集合中是否已经存在具有相同散列的元素。像这样:

do {
  $newArr = generateArray();
  $newArrHash = hash($newArr);
} while (isset($arrayCollection[$newArrayHash]));

它会非常快,比一次又一次地比较这些集合要快得多。)

至于hash功能,可以很简单...

function hash(array $arr) {
  return implode('|', $arr);
}

...或者您可能需要将它包装到一些摘要函数中(md5($x, true)我想会很好),如果$arr可能包含一些非常大的字符串/数字。

于 2012-07-18T18:30:53.697 回答