我想获取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];

数组运算符在valueForKeyPath:上调用contentArray,该数组通过使用数组运算符右侧的键路径(即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;
}

10-05 20:23