iphone - OBJ-C : Getting the minimum/maximum value in a NSMutableArray

标签 iphone objective-c plot core-plot

我想获得 NSMutableArray 的最大值和最小值,这样我就可以根据这些最大值和最小值创建一个核心绘图绘图空间和图形。

我的代码如下:

NSMutableArray *contentArray = [NSMutableArray arrayWithCapacity:100];
NSUInteger i;
for (i=0; i<60; i++){
id x = [NSNumber numberWithFloat:i*0.05];
id y = [NSNumber numberWithFloat:1.2*rand()/(float)RAND_Max + 0.6];
[contentArray addObject:[NSMutableDictionary dictionaryWithObjectsAndKeys:x, @"x", y, @"y", nil]];
}

self.dataForPlot = contentArray;

CPXYPlotSpace *plotSpace = (CPXYPlotSpace *)graph.defaultPlotSpace;
plotSpace.xRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromFloat() length:CPDecimalFromFloat()];
plotSpace.yRange = [CPPlotRange plotRangeWithLocation:CPDecimalFromFloat() length:CPDecimalFromFloat()];

如果我希望图形仅跨越 contentArray 中指定的空间,我应该如何填充 xRange 和 yRange 分配的空白?

最佳答案

在这种情况下,您应该使用 -[CPPlotSpace scaleToFitPlots:]。有关数组值的更一般计算,请继续阅读...

这是键值编码和相关联 array operators 的理想用途.在你的例子中,

float maxX = [[contentArray valueForKeyPath:@"@max.x"] floatValue];
float minY = [[contentArray valueForKeyPath:@"@min.x"] floatValue];

float maxY = [[contentArray valueForKeyPath:@"@max.y"] floatValue];
float minY = [[contentArray valueForKeyPath:@"@min.y"] floatValue];

数组运算符在 contentArray 上调用 valueForKeyPath:,它通过在数组的每个成员上调用相同的 valueForKeyPath: 生成一个数组键路径位于数组运算符的右侧(即 @min@max)。然后,原始调用将给定的运算符应用于结果数组。您可以轻松地在 NSArray 上定义一个类别,以返回一个最小/最大值结构:

typedef struct {
  float minX; 
  float minY;
  float maxX;
  float maxY;
} ArrayValueSpace;

@implementation NSArray (PlotSpaceAdditions)
- (ArrayValueSpace)psa_arrayValueSpace {
  ArrayValueSpace result;

  result.maxX = [[contentArray valueForKeyPath:@"@max.x"] floatValue];
  result.minX = [[contentArray valueForKeyPath:@"@min.x"] floatValue];

  result.maxY = [[contentArray valueForKeyPath:@"@max.y"] floatValue];
  result.minY = [[contentArray valueForKeyPath:@"@min.y"] floatValue];

  return result;
}

关于iphone - OBJ-C : Getting the minimum/maximum value in a NSMutableArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2344189/

相关文章:

ios - 扫描蓝牙时serviceUUIDs是什么意思?

iphone - 进入前台后加载应用程序

ios - 使用 grand central dispatch 下载 UIImage

r - 绘制 R 中的哪个参数?

iPhone游戏编程: Multiple UIImageViews in a UIViewController or UIImages in a UIView?

ios - 修复 UITableView 中第一行的纵横比

objective-c - 向 NavigationViewController 的后退按钮添加一些操作

iphone - 滚动 UIScrollView 时如何缩放

r - 如何使用序列频率将第二个 y 轴添加到 seqfplot?

python - 在 Bokeh 中在线性和对数刻度之间切换