【问题标题】:Better way to convert NSArray of NSNumbers to array of NSStrings将 NSNumbers 的 NSArray 转换为 NSStrings 数组的更好方法
【发布时间】:2011-11-14 08:37:52
【问题描述】:

我有一个由NSNumbers 组成的NSArray,我想通过获取第一个数组中每个NSNumberstringValue 将其转换为NSStringsNSArray

我想到的方法是迭代第一个值中的每个值,获取其字符串值并将其添加到另一个数组中。但是应该有一个更优雅的解决方案。你认识一个吗?

【问题讨论】:

  • 我认为你的解决方案是最优雅的 :-) 因为它简单明了
  • 如果您不只是匆匆忙忙地寻找比 3 行代码表现最佳的更好的解决方案,那么您的空闲时间就太多了。
  • @morningstar: :) 我没有那么多时间,实际上情况正好相反,但有时框架提供了很棒的方法,你会后悔不知道它们。我想找出那些如果有的话任何。

标签: objective-c cocoa nsarray


【解决方案1】:

NSArray 实现了Key-Value Coding 方法valueForKey:,它返回一个新数组。新数组包含向原始数组中的每个对象询问指定值的结果。在这种情况下,NSNumber 有它的stringValue,所以你所要做的就是:

NSArray * b = [a valueForKey:@"stringValue"];

不过,普通的旧快速枚举(或enumerateObjectsUsingBlock:)不会是一个糟糕的解决方案。 NSArrayvalueForKey: 的实现很可能在内部使用了 for 循环,以后阅读它的任何人都会很容易理解。

【讨论】:

  • 哇,真的吗?它确实看起来很辱骂,但也很棒。
  • 不滥用 - 非常惯用的 IMO。 stringValue 是 NSNumber 类的有效属性,而 NSArray 的 valueForKey: 是有意设计为允许以这种方式转换数组。这正是我写它的方式,不管它值多少钱。
  • 老实说,我没想到会这样。 @jbat100
  • @Chuck:嗯,就我而言,你的意见很有价值。感谢您的确认。
  • @morningstar:键值编码比声明的属性早了很多年。没有书面要求,甚至没有建议该值应该是声明的属性。您提出的另一种情况确实是对 KVC 的误用,但那是因为它违反了属性的语义。你可以对声明的属性做同样的事情。
猜你喜欢
  • 1970-01-01
  • 2015-09-11
  • 1970-01-01
  • 2014-05-03
  • 1970-01-01
  • 2019-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多