【问题标题】:Get 4 equidistant values from NSArray从 NSArray 获取 4 个等距值
【发布时间】:2013-04-04 19:00:29
【问题描述】:

假设我有一个包含 60 个元素的 NSArray。其中,我想在索引 15、30、45、60 处获得 4 个值。我试图将其放入 for 循环中,但在这里效果不佳:

for (int elementIndex = x_valuesDataArray.count / 4; elementIndex < x_valuesDataArray.count; elementIndex = elementIndex + elementIndex){
    NSLog(@"Element index is %d", elementIndex);
    NSLog(@"Total values %u", x_valuesDataArray.count);
    NSString *firstValue = [x_valuesDataArray objectAtIndex:elementIndex];
    [xAxisArray02 addObject:firstValue];
}

但我的NSLog 输出显示我做错了什么:

2013-04-12 13:48:59.267 myApp[44682:907] Element index is 15
2013-04-12 13:48:59.269 myApp[44682:907] Total values 60
2013-04-12 13:48:59.270 myApp[44682:907] Element index is 30
2013-04-12 13:48:59.271 myApp[44682:907] Total values 60

我在这里做错了什么?

【问题讨论】:

  • 15, 30, 60, 120, 240, ... 正是elementIndex = elementIndex + elementIndex 的增长方式。
  • 您的想法中的数学不太正确...如果计数是60,为什么要从60/4 = 第15 项开始枚举...?你说你想从第10题开始……我觉得你的问题是缺乏初等数学知识的问题,嗯?
  • @holex 玩世不恭,对吧?这个问题有一个我修复的错误,但忘记修复值。他们现在看起来好多了,你不觉得吗?
  • @SergiusGee 对不起,是的,有时我是,因为错误的根源现在很明显。 :)

标签: ios objective-c cocoa-touch nsarray int


【解决方案1】:

A. x_valuesDataArray 有 60 个元素,而不是您预测的 40 个元素。

B.这一行:elementIndex = elementIndex + elementIndex 应该是

elementIndex = elementIndex + 10

如果valuesDataArray 是 40。

【讨论】:

  • 是的,这里弄错了,是 60
【解决方案2】:
for (int i = 1; i <= 4; i++) {
    int elementIndex = x_valuesDataArray.count * i / 4 - 1;
    // ...
}

应该可以。请注意,具有 40 个元素的数组的索引为 0 .. 39。在这种情况下,上面 循环给出索引 9、19、29、39。还假设数组有至少 4 个元素。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-05
    • 1970-01-01
    • 2012-04-06
    • 1970-01-01
    • 2014-10-16
    • 2010-10-28
    相关资源
    最近更新 更多