【问题标题】:Initialise an array with numbers from 1 to n objective C用从 1 到 n 的数字初始化一个数组目标 C
【发布时间】:2013-07-15 22:40:43
【问题描述】:

非常基本的问题。我需要初始化一个 NSMutableArray,其值从 1 到 n(或者说 m 到 n)。在不使用 for 循环的情况下,我可以做些什么来初始化数组吗?我的意思是有没有类似的东西:

[[NSMutableArray alloc] initWithSomeThing];

提前致谢。

【问题讨论】:

  • while loop 怎么样?
  • 我的意思是不使用任何循环。
  • 这是不可能的,如果有一种方法可以做到这一点,那就是使用循环。
  • @HarikrishnanT 不,在某些时候应该有一个循环,Quantum-Objective-C 很远。另外,这个问题与 Xcode 无关。
  • 只是为了好玩(不要永远做那样的事情):P gist.github.com/alladinian/6019910

标签: objective-c nsmutablearray nsarray


【解决方案1】:

简短回答:没有

长答案:不

最简单的方法是查看class reference 看看它是否有类似的东西

【讨论】:

  • 这个答案让我笑了:)
  • 我喜欢长答案。
  • 所以没有必要在这篇文章中提供更多的简短答案:D
【解决方案2】:

NSArrays 旨在包含对象。仅包含整数的对象是相当重的。

当它总是从 1 开始上升到 n 时,为什么不将 n 值存储在变量中,而当您需要 1..n 数组时,只需从 1 到 n 执行一段时间

我不明白应该需要一个 1..n NSArray,我认为这就是为什么没有方法可以用 NSArray / NSMutableArray 做到这一点

【讨论】:

  • 很难想象有一个来自 1..n 的数组很有用的情况,但我不会假设你知道他想用它做什么。 NSNumbers 也是包含整数的对象,不会说这是一个重载
  • 这是一个重载,因为我可以用一个 NSNumber 来表示整个数组。因此,您只需将 42894 保存在 NSNumber 中,您就可以按需生成所有其他对象,而不是拥有 42894 个 NSNumber。这是一个巨大的开销..
  • 这是真的,但同样,你不知道他实际上在做什么,也许仅仅存储一个数字是行不通的
  • @Fonix 如果您通过索引从 0..n 引用某些内容,那么最初您必须创建一个包含来自 0..n 的数字的数组。例如。您有一个可以重新排序的表格视图,但您仍然希望原始引用与单元格索引同步;数组索引 = 单元格索引,值 = 一些数据引用。
【解决方案3】:

您可以创建一个类别方法来执行此操作:

@interface NSMutableArray(MyConvenienceMethods)

+(NSMutableArray*) arrayWithValuesFrom: (int) n to: (int) m step: (int) step;

@end

@implementation NSMutableArray(MyConvenienceMethods)

+(NSMutableArray*) arrayWithValuesFrom: (int) n to: (int) m step: (int) step
{
    NSMutableArray* ret = [[NSMutableArray alloc] init];
    for (int i = n ; i <= m ; i += step) 
    {
        [ret addObject: [NSNumber numberWithInt: i]];
    }
    return ret;
}

@end

你可以这样使用它:

NSMutableArray* anArray = [NSMutableArray arrayWithValuesFrom: 1 to: 100 step: 1];

【讨论】:

  • 这是一个循环;)这个问题要求有一个没有循环的解决方案。所以就像 Haskell 等惰性语言中的 1..n 东西
  • @lukaswelte 是的,但它只是一个循环在一个地方。最终,即使 Cocoa 中有一个内置的初始化程序,它的实现仍然会有一个循环。
  • @lukaswelte 如果你认为 Haskell 构造中没有循环(或类似递归),你会失望的。
  • 不,在 Haskell 中你不会在做一些事情之前创建所有的对象。您仅在需要时才评估功能,并且仅在需要时进行。这就是为什么你可以有一个无限列表所以 1..infinity
  • @lukaswelte 但是实现将涉及某种形式的循环或递归,即使它没有预先完成。就像我的方法一样,实现细节对用户隐藏。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-25
  • 2016-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多