数组名称将以哪种顺序打印TCL中的键?

时间:2015-08-24 11:14:50

标签: arrays hash tcl

任何人都可以告诉我,哈希函数在tcl数组中是如何工作的。

<html>
<body>
<form method="post">
Insert: <input type="text" name="q" value="Tim"/>
<input type="submit" value="Submit">
</form>

<?php
if (isset($_POST['q'])) {
$test_name = $_POST['q'];

$servername = "localhost";
$username = "root";
$password = "";
$dbname = "personnames";

$conn = new mysqli($servername, $username, $password, $dbname);

      if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
      }

$people = 'I';
$stmt = $conn->prepare("INSERT INTO names (person) VALUE=(?) where  
person_initial=(?)");

$stmt->bind_param("ss",$test_name,$people);

$stmt->execute();
$stmt->close();
$conn->close();   
} 
?>
</body>
</html>

对于这个程序,我得到如下输出。

21 entries in table, 16 buckets
17 18 1 20 19 2 3 4 5 6 7 8 9 10 11 30 12 13 14 15 16

我想知道,按键在哪里打印。

1 个答案:

答案 0 :(得分:1)

array names命令以“任意”顺序生成数组的键。它实际上是底层哈希表的当前自然迭代顺序,它可以随着数组的增长而改变,除了通过引用数组的实现和历史之外,实际上很难解释。因为它太难了,我们只是倾向于说“随机”;它不是,但也可能是(除了产生随机数之外的目的;它是一个可怕的 PRNG)。它总是像这样工作。其他array子命令将使用相同的顺序,尤其是array get和非常少使用的迭代器子命令。

如果您需要特定订单,则必须自行对其进行排序。 lsort命令可能对此有用。或者您可以使用dict;那些维护插入顺序(但在技术上是值,因此您不能trace元素或upvar它。