组合两个否定条件时应该使用 AND 还是 OR?
Should I use AND or OR when combining two negative conditions?
三种车辆类型是Car
、Motorcycle
和Bicycle
。三种状态分别是Available
、Reserved
和Sold
.
我要打印所有 not Car
and are not 的车辆信息 Sold
,即不应打印已售出的汽车。换句话说,打印所有Motorcycle
或Bicycle
的信息,具有Available
、Reserved
和Sold
之间的任何状态。如果是Car
,只要是Available
或者Reserved
.
,还是打印
车辆是:
- 汽车 - 已售出
- 汽车 - 可用
- 汽车 - 预留
- 自行车 - 已售出
- 自行车 - 可用
- 自行车 - 预留
- 摩托车 - 已售出
- 摩托车 - 可用
- 摩托车 - 预留
我希望下面的代码打印除数字 1(汽车 - 已售出)之外的所有内容
我的代码:
for _, v := range results {
if v.Type != "Car" && v.Status != "Sold" { // && does not work but || works
resp = append(resp, &VehicleInfo {
ID: v.Id,
Brand: v.Brand,
Type: v.Type,
Status: v.Sold,
})
}
}
fmt.Println(resp)
当我使用AND (&&)
时,Println
的结果很奇怪,它输出5、6、8、9。然而,当我切换到OR (||)
时,它打印的正是我想要,这是除 1(已售汽车)之外的所有内容,它是所有 Motorcycle
(任何状态)、所有 Bicycle
(任何状态)和所有 Car
的列表,即 Available
或 Reserved
.
这里有什么问题?我认为使用 AND (&&)
是正确的答案,但事实并非如此。
您的问题陈述……不清楚。语句
I want to print the information of all vehicles that are not Car
and are not Sold
,...
但问题陈述的剩余部分:
... i.e. sold cars should not be printed. In other words, print information of everything that is Motorcycle or Bicycle, with any status among Available, Reserved and Sold. If it is a Car, still print as long as it is Available or Reserved.
表示您要过滤掉(排除)已售出的汽车。
最简单的方法是这样的:
for _, v := range results {
isSoldCar := v.Type == "Car" && v.Status == "Sold"
if isSoldCar {
continue
}
resp = append(resp, &VehicleInfo {
ID: v.Id,
Brand: v.Brand,
Type: v.Type,
Status: v.Sold,
})
}
或者这个:
for _, v := range results {
isSoldCar := v.Type == "Car" && v.Status == "Sold"
if !isSoldCar {
resp = append(resp, &VehicleInfo {
ID: v.Id,
Brand: v.Brand,
Type: v.Type,
Status: v.Sold,
})
}
}
三种车辆类型是Car
、Motorcycle
和Bicycle
。三种状态分别是Available
、Reserved
和Sold
.
我要打印所有 not Car
and are not 的车辆信息 Sold
,即不应打印已售出的汽车。换句话说,打印所有Motorcycle
或Bicycle
的信息,具有Available
、Reserved
和Sold
之间的任何状态。如果是Car
,只要是Available
或者Reserved
.
车辆是:
- 汽车 - 已售出
- 汽车 - 可用
- 汽车 - 预留
- 自行车 - 已售出
- 自行车 - 可用
- 自行车 - 预留
- 摩托车 - 已售出
- 摩托车 - 可用
- 摩托车 - 预留
我希望下面的代码打印除数字 1(汽车 - 已售出)之外的所有内容
我的代码:
for _, v := range results {
if v.Type != "Car" && v.Status != "Sold" { // && does not work but || works
resp = append(resp, &VehicleInfo {
ID: v.Id,
Brand: v.Brand,
Type: v.Type,
Status: v.Sold,
})
}
}
fmt.Println(resp)
当我使用AND (&&)
时,Println
的结果很奇怪,它输出5、6、8、9。然而,当我切换到OR (||)
时,它打印的正是我想要,这是除 1(已售汽车)之外的所有内容,它是所有 Motorcycle
(任何状态)、所有 Bicycle
(任何状态)和所有 Car
的列表,即 Available
或 Reserved
.
这里有什么问题?我认为使用 AND (&&)
是正确的答案,但事实并非如此。
您的问题陈述……不清楚。语句
I want to print the information of all vehicles that are not
Car
and are notSold
,...
但问题陈述的剩余部分:
... i.e. sold cars should not be printed. In other words, print information of everything that is Motorcycle or Bicycle, with any status among Available, Reserved and Sold. If it is a Car, still print as long as it is Available or Reserved.
表示您要过滤掉(排除)已售出的汽车。
最简单的方法是这样的:
for _, v := range results {
isSoldCar := v.Type == "Car" && v.Status == "Sold"
if isSoldCar {
continue
}
resp = append(resp, &VehicleInfo {
ID: v.Id,
Brand: v.Brand,
Type: v.Type,
Status: v.Sold,
})
}
或者这个:
for _, v := range results {
isSoldCar := v.Type == "Car" && v.Status == "Sold"
if !isSoldCar {
resp = append(resp, &VehicleInfo {
ID: v.Id,
Brand: v.Brand,
Type: v.Type,
Status: v.Sold,
})
}
}