三元运算符用法?(Ternary operator usages?)
我知道三元运算符用于在评估逻辑条件后进行变量赋值。
所以:
String s = (logicalVariable) ? "Hello" : "Bye, bye";
要么,
int x = (5<3) ? 10 : 100;
将是用法示例,对吧?
但是,如果我真的不想做变量赋值但是设置一个句子甚至一段代码,例如:
if (inventario.containsKey(item)) return inventario.get(item); else return Integer.MIN_VALUE;
可以使用三元运算符将这些行写成一行表达式吗?
I know that ternary operator is used of doing a variable assignment after a evaluating a logical condition.
So:
String s = (logicalVariable) ? "Hello" : "Bye, bye";
or,
int x = (5<3) ? 10 : 100;
would be usage examples, right?
But what if Idon't really want to do a variable assignment but to set a sentence or even a piece of code, for example:
if (inventario.containsKey(item)) return inventario.get(item); else return Integer.MIN_VALUE;
Can these lines be writen in a one line expression, probably by using the ternary operator?
原文:https://stackoverflow.com/questions/18414835
最满意答案
您需要确保为自定义类定义了一个好的
isEqual:
方法,因为这是NSArray
用来确定包含的内容: https : //developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation / Classes / NSArray_Class /#// apple_ref / occ / instm / NSArray / containsObject :假设这个类有类似'key'或'id'的值,对于每个类的实例(在你的例子中是
double
类型)是唯一的。 当然,情况并非总是如此; 它通常是个别属性/ ivars的集合,构成一个独特的“关键”,但为了讨论的目的,让我们说这样一个领域存在。 您的代码可能看起来像这样(全部在.m
):static double const EPSILON = .000000001; // You'll need to be the judge of how "close" values can be to each other but still be distinct @interface MyObjectClass: NSObject @property (nonatomic, readonly) double uniqueKey; @end @implementation MyObjectClass // ... - (BOOL)isEqual:(id)object { if (self == object) { return YES; } if (!object isKindOfClass:[MyObjectClass class]]) { return NO; } MyObjectClass *myObject = (MyObjectClass *)object; if (abs(self.uniqueKey - myObject.uniqueKey) < EPSILON) { return YES; } return NO; } //... @end
请注意,您不应检查两个
float
或double
值之间的直接相等性; 看比较浮点值有多危险? 有关使用浮点和双精度值的陷阱的良好讨论。You'll need to make sure you have a good
isEqual:
method defined for your custom class, since that's whatNSArray
uses to determine containment: https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/#//apple_ref/occ/instm/NSArray/containsObject:Let's say this class has something like a 'key' or 'id' value that is unique for each instance of the class (which in your case is a
double
type). This will not always be the case, of course; it's often an aggregate of individual properties/ivars that constitutes a unique 'key', but for the purposes of this discussion let's say that such a field exists. Your code might look something like this (all in the.m
):static double const EPSILON = .000000001; // You'll need to be the judge of how "close" values can be to each other but still be distinct @interface MyObjectClass: NSObject @property (nonatomic, readonly) double uniqueKey; @end @implementation MyObjectClass // ... - (BOOL)isEqual:(id)object { if (self == object) { return YES; } if (!object isKindOfClass:[MyObjectClass class]]) { return NO; } MyObjectClass *myObject = (MyObjectClass *)object; if (abs(self.uniqueKey - myObject.uniqueKey) < EPSILON) { return YES; } return NO; } //... @end
Note that you should NOT check for direct equality between two
float
ordouble
values; see How dangerous is it to compare floating point values? for a good discussion about the pitfalls of working with floating point and double precision values.
相关问答
更多-
这是我在这里回答的重新发布的帖子: https : //stackoverflow.com/a/39169603/6761960 。 为方便起见,我会重新发帖。 应用程序和服务存在于同一个进程中,这意味着当应用程序被杀死时,您的服务就是如此。 更改onStartCommand的返回值不会影响此过程。 它只是告诉服务,当你告诉它或者它完成了它需要的时候,它要么开始/停止。 要更改服务以使其单独销毁并假设它是由于使用onStartCommand而启动的服务而不是绑定服务,请在该服务的清单中指定进程名称。 来自P ...
-
购买完成后,您可以删除广告。 做类似的事情。 [bannerView removeFromSuperview]; 您只需在购买完成后隐藏广告即可。 When the purchase completes, it is up to you to remove the ads. Do something similar to this. [bannerView removeFromSuperview]; All you have to do is hide the ads when the purchase ...
-
此解决方案假设您已经以通过重新启动设备将保持的方式存储要使用的地理栅栏信息。 首次启动时,在处理RECEIVE_BOOT_COMPLETED的BroadcastReceiver中,检查GPS 是否启用 。 如果是,继续正常,但如果没有,请将其添加到您的接收器中: @Override public void onReceive(Context context, Intent intent) { //Or whatever action your receiver accepts if(int ...
-
在重新启动应用程序后,containsObject返回NO(containsObject is returning NO after the app is restarted)[2023-08-19]
您需要确保为自定义类定义了一个好的isEqual:方法,因为这是NSArray用来确定包含的内容: https : //developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation / Classes / NSArray_Class /#// apple_ref / occ / instm / NSArray / containsObject : 假设这个类有类似'key'或'id'的值,对于每个类的实例(在你的例子中是do ... -
好的,我明白了。 简单的错误..我没有直接将值设置为'BuddyGroupsSetting`属性,而是错误地添加了一个项目 BuddyGroupsSetting.Add(item) 所以set从未实际调用过! 为了纠正这个问题,我创建了一个私有字 private List
buddyGroupsSetting = new List (); 然后使用此字段设置值 buddyGroupsSetting = BuddyGroupsSetting OK I figured it ... -
应用程序重新启动时,无法按下编程生成的按钮(Programmatically generated buttons can't be pressed when the app is restarted)[2023-06-09]
我认为最大的问题是你如何定义行动。 这是一个更新的版本(在Swift 3中) let btn: UIButton = UIButton(frame: CGRect(x: 10, y: 60 * indexButton, width: screenWidth - 20, height: 50)) btn.layer.cornerRadius = 0.5 * btn.bounds.size.height btn.backgroundColor = UIColor.white btn.setTitleColor( ... -
共享的Cassandra会话失去连接,必须重新启动应用程序(Shared Cassandra Session loses connection and app must be restarted)[2023-07-21]
您不需要创建新会话。 假设您使用的是datastax python-driver ,则驱动程序会维护一个“控制连接”,用于订阅节点向上/向下事件。 如果控制连接丢失,它将重新连接到群集中的另一台主机。 打开调试日志记录会很有用,这将揭示集群中节点被标记为低的原因。 You should not need to create a new session. Assuming you are using the datastax python-driver, the driver maintains a 'con ... -
如果你没有给他们expirationDate Cookies不会持久 let cookie = { url: 'http://www.drutas.com', name: 'userDetailsGoogle', value: JSON.stringify(userDetailsGoogle), expirationDate: 2093792393999 }; 如果你给他们expirationD ...
-
IBM Mobilefirst:当我点击通知时,应用程序重新启动(IBM Mobilefirst : App gets restarted when I click on the Notification)[2022-01-06]
在Android中设置GCM客户端并接收下游消息是您将要针对您的方案进行研究的重要参考。 您必须定义接收消息所需的GCM接收器和服务。 这将极大地帮助您在任何Activity接收消息(因为Service不需要任何UI,并且BroadcastReceiver将帮助CPU唤醒以便侦听器服务将完成其任务)。 希望这可以帮助! Finally i got some solution. I have created a dummy activity and binding the above mention code ... -
如何找出重新启动ASP.NET Web应用程序的原因(How to find out why an ASP.NET web application is being restarted)[2021-12-18]
Tess Ferrandez撰写了一篇关于如何确定App Domain回收原因的博客文章 。 Tess如何记录重启事件: 你如何确定导致appdomain重启的原因? 在ASP.NET 2.0中,您可以使用内置的运行状况监视事件来记录应用程序重新启动以及重新启动的原因。 为此,您需要更改C:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ CONFIG目录中的主web.config文件并添加以下部分相关文章
更多- 代码之谜(三)- 运算符
- Java运算符
- 在javascript中,逻辑运算符==和===有何不同
- Groovy 运算符详解
- Lua 运算符详解
- Python基础 运算
- while用法
- PHP视频教程-3天基础巩固[2014新版] (60集)
- spend用法
- MongoDB学习 (五):查询操作符(Query Operators).1st
最新问答
更多- 您如何使用git diff文件,并将其应用于同一存储库的副本的本地分支?(How do you take a git diff file, and apply it to a local branch that is a copy of the same repository?)
- 将长浮点值剪切为2个小数点并复制到字符数组(Cut Long Float Value to 2 decimal points and copy to Character Array)
- OctoberCMS侧边栏不呈现(OctoberCMS Sidebar not rendering)
- 页面加载后对象是否有资格进行垃圾回收?(Are objects eligible for garbage collection after the page loads?)
- codeigniter中的语言不能按预期工作(language in codeigniter doesn' t work as expected)
- 在计算机拍照在哪里进入
- 使用cin.get()从c ++中的输入流中丢弃不需要的字符(Using cin.get() to discard unwanted characters from the input stream in c++)
- No for循环将在for循环中运行。(No for loop will run inside for loop. Testing for primes)
- 单页应用程序:页面重新加载(Single Page Application: page reload)
- 在循环中选择具有相似模式的列名称(Selecting Column Name With Similar Pattern in a Loop)
- System.StackOverflow错误(System.StackOverflow error)
- KnockoutJS未在嵌套模板上应用beforeRemove和afterAdd(KnockoutJS not applying beforeRemove and afterAdd on nested templates)
- 散列包括方法和/或嵌套属性(Hash include methods and/or nested attributes)
- android - 如何避免使用Samsung RFS文件系统延迟/冻结?(android - how to avoid lag/freezes with Samsung RFS filesystem?)
- TensorFlow:基于索引列表创建新张量(TensorFlow: Create a new tensor based on list of indices)
- 企业安全培训的各项内容
- 错误:RPC失败;(error: RPC failed; curl transfer closed with outstanding read data remaining)
- C#类名中允许哪些字符?(What characters are allowed in C# class name?)
- NumPy:将int64值存储在np.array中并使用dtype float64并将其转换回整数是否安全?(NumPy: Is it safe to store an int64 value in an np.array with dtype float64 and later convert it back to integer?)
- 注销后如何隐藏导航portlet?(How to hide navigation portlet after logout?)
- 将多个行和可变行移动到列(moving multiple and variable rows to columns)
- 提交表单时忽略基础href,而不使用Javascript(ignore base href when submitting form, without using Javascript)
- 对setOnInfoWindowClickListener的意图(Intent on setOnInfoWindowClickListener)
- Angular $资源不会改变方法(Angular $resource doesn't change method)
- 在Angular 5中不是一个函数(is not a function in Angular 5)
- 如何配置Composite C1以将.m和桌面作为同一站点提供服务(How to configure Composite C1 to serve .m and desktop as the same site)
- 不适用:悬停在悬停时:在元素之前[复制](Don't apply :hover when hovering on :before element [duplicate])
- 常见的python rpc和cli接口(Common python rpc and cli interface)
- Mysql DB单个字段匹配多个其他字段(Mysql DB single field matching to multiple other fields)
- 产品页面上的Magento Up出售对齐问题(Magento Up sell alignment issue on the products page)