【问题标题】:Fastest way to store these phrases [closed]存储这些短语的最快方法[关闭]
【发布时间】:2017-04-11 09:37:36
【问题描述】:

构建一个简单的算法,其中基于各种输入(x、y、z),一个短语将被发送回给用户。存储和搜索这些短语的最快方法是什么?

目前,我正在使用各种 if 语句。但我想知道是否应该改用某种字典或哈希映射。

我在这里发布了一个代码示例。

谢谢!

  for ( $i=0 ; $i < count($age) ; $i++ ) {
    if ($age[$i] >= 95) { 
      $something = "You need a plant";
    } elseif ($age[$i] >= 85 && $age[$i] < 95) {
      $something = "You need a small rug and a plant";
    } elseif ($age[$i] >= 75 && $age[$i] < 85) {
      $something = "You need a rug";
    } elseif ($age[$i] >= 60 && $age[$i] < 75) {
      $something = "You need a coffee table";
    } elseif ($age[$i] >= 55 && $age[$i] < 60) {
      $something = "You need a small table";
    } elseif ($age[$i] >= 51 && $age[$i] < 55) {
      $something = "You need a table";
    } elseif ($age[$i] >= 42 && $age[$i] < 51) {
      $something = "You need a knife";
    } elseif ($age[$i] >= 35 && $age[$i] < 42) {
      $something = "You need a knife and a jar";
    } elseif ($age[$i] >= 22 && $age[$i] < 35) {
      $something = "You need a knife, bowl, jar and a small book";
    } elseif ($age[$i] >= 5 && $age[$i] < 22) {
      $something = "You need a knife, bowl, jar and a book";
    } else {
      $something = "Go back to sleep";
    }

    if ($somethingElse[$i] >= 30) {
      $also = " and we'll see you tomorrow!";
    } else {
      $also = ".";
    }

    $phrase[$i] = ''.$something.''.$also.'';
}

【问题讨论】:

  • 请提供您尝试过的代码、示例输入和预期输出,并用您使用的编程语言标记问题。
  • 已更新代码示例。
  • 实际上取决于您必须进行的测试类型。可能最好你给出一个具体的案例,我们可以给出具体的答案。答案在很大程度上取决于可以以类似方式处理这些条件中的多少。如果你有$x &gt; 3,然后是$x &gt; 2$x &gt; 0,等等......那么还有改进的余地。
  • 谢谢@trincot。我已经更新了我的代码示例。是的,它非常笨拙,这就是为什么我想找到一种更聪明的方法来做到这一点。提前谢谢!

标签: php algorithm search


【解决方案1】:

对于短语的第一部分,您可以使用一个以年龄限制为键、以文本为值的数组。对于第二部分,更多的是选择是/否,您可以使用三元运算符。

foreach 也更适合循环遍历 $age 数组:

$phrases = [
    95 => "You need a plant",
    85 => "You need a small rug and a plant",
    75 => "You need a rug",
    65 => "You need a coffee table",
    55 => "You need a small table",
    51 => "You need a table",
    42 => "You need a knife",
    35 => "You need a knife and a jar",
    22 => "You need a knife, bowl, jar and a small book",
    5  => "You need a knife, bowl, jar and a book",
];

foreach ($age as $i => $a) {
    foreach ($phrases as $limit => $something) {
        if ($a >= $limit) break;
    }
    $also = $somethingElse[$i] >= 30 ? " and we'll see you tomorrow!" : ".";
    $phrase[] = "$something$also";
}   

请注意,除非您已经有一个数组$phrase,否则您不需要指定索引$i,因为[] 只会将其附加到末尾。所以最后你只需要 $i$somethingElseforeach 语法中仍然需要它的原因。

【讨论】:

  • 太棒了。干净多了。谢谢@trincot!
  • 请注意一个小的更正:您错过了$somethingElse[$i] 仍然需要 $i 的事实。现已更正(参见foreach)。
猜你喜欢
  • 2011-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多