ถ้าคุณต้องการสร้างอาร์เรย์ของจำนวนเต็มคุณสามารถใช้ NSInteger ได้หรือไม่? คุณต้องใช้ NSNumber หรือไม่? ถ้าเป็นเช่นนั้นทำไม?
ถ้าคุณต้องการสร้างอาร์เรย์ของจำนวนเต็มคุณสามารถใช้ NSInteger ได้หรือไม่? คุณต้องใช้ NSNumber หรือไม่? ถ้าเป็นเช่นนั้นทำไม?
คำตอบ:
คุณสามารถใช้อาร์เรย์ C แบบเก่าธรรมดา:
NSInteger myIntegers[40];
for (NSInteger i = 0; i < 40; i++)
myIntegers[i] = i;
// to get one of them
NSLog (@"The 4th integer is: %d", myIntegers[3]);
หรือคุณสามารถใช้NSArray
หรือNSMutableArray
แต่ที่นี่คุณจะต้องรวมจำนวนเต็มแต่ละจำนวนไว้ในNSNumber
อินสแตนซ์ (เนื่องจากNSArray
อ็อบเจ็กต์ได้รับการออกแบบมาเพื่อเก็บอินสแตนซ์ของคลาส)
NSMutableArray *myIntegers = [NSMutableArray array];
for (NSInteger i = 0; i < 40; i++)
[myIntegers addObject:[NSNumber numberWithInteger:i]];
// to get one of them
NSLog (@"The 4th integer is: %@", [myIntegers objectAtIndex:3]);
// or
NSLog (@"The 4th integer is: %d", [[myIntegers objectAtIndex:3] integerValue]);
NSArray
ฉันแน่ใจว่าคุณจะไม่รู้สึกถึงประสิทธิภาพ
อาร์เรย์ C:
NSInteger array[6] = {1, 2, 3, 4, 5, 6};
Objective-C อาร์เรย์:
NSArray *array = @[@1, @2, @3, @4, @5, @6];
// numeric values must in that case be wrapped into NSNumbers
Swift Array:
var array = [1, 2, 3, 4, 5, 6]
ก็ถูกต้องเช่นกัน:
var array = Array(1...10)
หมายเหตุ: อาร์เรย์ถูกพิมพ์อย่างรุนแรงใน Swift; ในกรณีนี้คอมไพลเลอร์สรุปเนื้อหาว่าอาร์เรย์เป็นอาร์เรย์ของจำนวนเต็ม คุณสามารถใช้ไวยากรณ์ประเภทที่ชัดเจนนี้ได้เช่นกัน:
var array: [Int] = [1, 2, 3, 4, 5, 6]
หากคุณต้องการอาร์เรย์ของ Doubles คุณจะใช้:
var array = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0] // implicit type-inference
หรือ:
var array: [Double] = [1, 2, 3, 4, 5, 6] // explicit type
หากคุณต้องการใช้ NSArray คุณต้องมีคลาส Objective-C จึงจะใส่ได้ด้วยเหตุนี้ข้อกำหนด NSNumber
ที่กล่าวว่า Obj-C ยังคงเป็น C ดังนั้นคุณสามารถใช้อาร์เรย์ C ปกติและถือ ints ปกติแทน NSNumbers ได้หากคุณต้องการ
คุณสามารถใช้CFArrayแทน NSArray ได้ นี่คือบทความอธิบายวิธีการ
CFMutableArrayRef ar = CFArrayCreateMutable(NULL, 0, NULL);
for (NSUInteger i = 0; i < 1000; i++)
{
CFArrayAppendValue(ar, (void*)i);
}
CFRelease(ar); /* Releasing the array */
เช่นเดียวกันกับเวอร์ชัน CoreFoundation ของคอนเทนเนอร์อื่น ๆ ด้วย
ฉันสร้าง Objective C wrapper อย่างง่ายรอบ ๆ C อาร์เรย์เก่าที่ดีเพื่อให้ใช้งานได้สะดวกยิ่งขึ้น: https://gist.github.com/4705733
หากไม่ต้องการลำดับของจำนวนเต็มของคุณและมีเฉพาะค่าที่ไม่ซ้ำกัน
คุณยังสามารถใช้ NSIndexSet หรือ NSMutableIndexSet คุณจะสามารถเพิ่มและลบจำนวนเต็มได้อย่างง่ายดายหรือตรวจสอบว่าอาร์เรย์ของคุณมีจำนวนเต็มหรือไม่
- (void)addIndex:(NSUInteger)index
- (void)removeIndex:(NSUInteger)index
- (BOOL)containsIndexes:(NSIndexSet *)indexSet
ตรวจสอบเอกสารสำหรับข้อมูลเพิ่มเติม
NSSet
(และใช้จำนวนเต็มรวมกับ an NSNumber
)
ฉันคิดว่ามันง่ายกว่ามากที่จะใช้ NSNumbers ทั้งหมดนี้ที่คุณต้องทำ:
NSNumber *myNum1 = [NSNumber numberWithInt:myNsIntValue1];
NSNumber *myNum2 = [NSNumber numberWithInt:myNsIntValue2];
.
.
.
NSArray *myArray = [NSArray arrayWithObjects: myNum1, myNum2, ..., nil];
for
arrayWithArray