2012-06-24 44 views
5

Có cách nào đẹp hơn để điền vào một mảng có số không so với số tôi sử dụng không? Thật điên rồ khi tôi viết chỉ để điền vào một mảng với các con số để chúng có thể được sử dụng để tính toán trong một vòng lặp. Điều này dễ dàng hơn trong các ngôn ngữ dựa trên C khác như PHP, As3 hoặc Java.Mục tiêu C - Mảng với số

NSArray *myArray = [NSArray arrayWithObjects: 
        [NSNumber numberWithInt:1000],[NSNumber numberWithInt:237], [NSNumber numberWithInt:2673], nil]; 

int total = 0; 
for(int i = 0; i < [myArray count]; i += 1){ 
    total += [[myArray objectAtIndex: i]intValue]; 
    NSLog(@"%i", total); 
} 

Hy vọng rằng có một cách ngắn ... Tôi chỉ muốn để điền vào một mảng với ints ... không thể là khó

+2

Không có ngôn ngữ nào trong số đó là "dựa trên C". –

+0

Đối với một số thứ bạn muốn các đối tượng 'NSNumber', chúng có thể được lưu trữ trong bộ sưu tập và tự động mã hóa/giải mã thành tệp/luồng mạng, v.v. Đối với những thứ khác, bạn có thể muốn C cũ tốt trong mảng C, để tra cứu siêu nhanh và cách sử dụng (ví dụ một bảng tần số trong một chức năng xử lý âm thanh). Trong Objective-C bạn có thể chọn cái nào là thích hợp nhất, nó hỗ trợ cả hai. – jhabbott

Trả lời

10

Tôi đoán bạn phải sử dụng NSNumber cho một NSArray. Nếu bạn muốn sử dụng ints, tôi đoán bạn sẽ phải sử dụng một mảng c:

NSInteger myArray[20]; 

for (int i=0;i<20;i++) { 
    int num=myArray[i]; 

    //do something 
} 

NSNumber mặc dù tôi đoán là cách tiếp cận tốt hơn cho ngôn ngữ này. Ít nhất bạn có thể làm liệt kê nhanh để rút ngắn mã một chút:

for (NSNumber *n in myArray) { 
int num = [n intValue]; 

//do something.... 

} 

EDIT:

Câu hỏi đặt ra đã được yêu cầu 3 năm về trước. Đã có literals mới thành lập để làm cho nó dễ dàng hơn để tạo các đối tượng như NSNumbers hoặc NSArrays:

NSNumber *n = @100; 

hoặc

NSArray *array = @[@100,@50,@10]; 
+0

THANKS MARIO ... – mogio

+0

không phải là một prob ... cảm thấy tự do để chấp nhận :) – Mario

+0

Cú pháp bằng chữ được mô tả đã có sẵn: http://clang.llvm.org/docs/ObjectiveCLiterals.html –

0

đẹp thay thế ngắn cho Looping số nguyên cụ thể:

NSArray *numbers = [@"1000,237,2673" componentsSeparatedByString:@","]; 
for (NSString *i in numbers) { 
    [i intValue]; // Do something. 
} 
+0

cách thú vị ... cảm ơn Anne! – mogio

0

Đầu tiên bắt đầu với mảng C:

NSInteger myCArray = { 1000, 237, 2673 }; 
// calculate number of elements 
NSUInteger myCArrayLength = sizeof(myCArray)/sizeof(NSInteger; 

Thứ hai, nếu bạn cần một vòng lặp NSArray qua mảng này và tạo một:

NSMutableArray *myNSArray = [NSMutableArray arrayWithCapacity:myCArrayLength]; 
for(NSUInteger ix = 0; ix < myCArrayLength; ix++) 
    [myNSArray addObject:[NSNumber numberWithInteger:myCArray[ix]]; 

Bạn có thể quấn mảnh thứ hai của mã lên như một phạm trù trên NSArray nếu bạn đang làm việc đó rất nhiều.

0

quá muộn. nhưng bạn cũng có thể làm như sau.

int total = 0; 
nsarray *myArray = @[@1.8,@100,@299.8]; 
for(nsnumber *num in myArray){ 
total+=num; 
} 
+0

Dường như cú pháp này được đề cập trong câu trả lời đã được chấp nhận - giá trị nào khiến nó lại có giá trị? – Krease