仅当条件满足时才检查条件

时间:2019-04-01 12:18:04

标签: delphi

我有一个代码示例,不确定哪种方法是最佳使用方式。

例如我有

if x = 1
if y = 2
if abc = false check z = 3. if abc = true then dont check z = 3

仅检查

if (abc = false) then
begin
  if (x = 1) and (y = 2) and (z = 3) then
  begin
    ...  
end
else
begin
  if (x = 1) and (y = 2) then
  begin
    ...

我不确定我是否在解释最好但希望人们能理解的东西。

我想知道这是否可行或最好的方法。请记住,而不是示例中x,y,z和abc。我可以使用更多的东西。

我目前的结构是...我认为不可行,并认为有更好的方法,但我不确定

// remove dates older than 30 days
function remove30DayBeforeDates($a) {
    $pieces = explode(' ', $a['datetime']);
    return strtotime($pieces[0]) > strtotime('-30 days');
}
// remove dates older than 30 days

$array = array(
    array(
        'datetime' => '3/29/2019 4:00:00 PM - 5:00:00 PM',
        'value_raw' => 95
    ), array(
        'datetime' => '4/01/2019 3:00:00 PM - 4:00:00 PM',
        'value_raw' => 99
    ), array(
        'datetime' => '3/31/2019 2:00:00 PM - 3:00:00 PM',
        'value_raw' => 101
    ), array(
        'datetime' => '2/10/2019 2:00:00 PM - 3:00:00 PM',
        'value_raw' => 112
    ), array(
        'datetime' => '3/30/2019 2:00:00 PM - 3:00:00 PM',
        'value_raw' => 100
        ));

$array = array_filter($array, "remove30DayBeforeDates");

// sort array based on the date

function check($a, $b) {
    $pieces1 = explode(' ', $a['datetime']);
    $pieces2 = explode(' ', $b['datetime']);
    return strtotime($pieces2[0]) <=> strtotime($pieces1[0]); // use spaceship operator
}

// sort array based on the date

usort($array, "check");

$value_raw = array_column($array, 'value_raw'); // get array of values from column "value_raw"

print_r(implode(',',$value_raw));

预先感谢

2 个答案:

答案 0 :(得分:2)

您的代码示例均未编译,因为两者均未使用正确的语法。

这应该使您入门:

if (x = 1) and (y = 2) then
begin
  if (abc) then 
    // Handle abc = True
  else 
  begin
    if (z = 3) then
      // Handle abc = false and z = 3
    else
      // Handle abc = false and z <> 3
  end;
end;

答案 1 :(得分:2)

我认为您正在寻找or。现在,您将检查x必须为1,y必须为2,如果abc为false,z必须为3。

如果abc = true,z仍可以为3,但不会被选中。

请注意,我只是写了abc而不是abc = true。由于已经是布尔值(true / false),因此可以。

还要注意如何使用括号对操作进行分组。总子表达式abc or (z=3)必须返回true,总表达式才能返回true。

此外,这些术语的顺序十分重要-它们从左到右进行评估。如果将术语(abc or (z=3))替换为逻辑上相等的术语((z=3) or abc),则会对z=3 进行评估。

if (x = 1) and (y = 2) and (abc or (z = 3)) then
   // Your magic goes here

测试程序主体以证明顺序很重要

function z : Integer;
begin
  writeln('Z being evaluated');
  result := x + y;
end;

begin
  x := 1;y := 2;
  abc := true;
  if (x=1) and (y=2) and (abc or (z=3)) then
    writeln ('evaluated true')
  else
    writeln ('evaluated false');
  writeln('done');
  readln;
end.