Nếu bạn muốn tạo một dãy số nguyên, bạn có thể sử dụng NSInteger không? Bạn có phải sử dụng NSNumber không? Nếu có thì tại sao?Tạo một dãy số nguyên trong iOS
Trả lời
Bạn có thể sử dụng một đồng bằng mảng C 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]);
Hoặc, bạn có thể sử dụng một NSArray
hoặc NSMutableArray
, nhưng ở đây bạn sẽ cần phải quấn lên mỗi số nguyên trong một thể hiện NSNumber
(vì NSArray
đối tượng được thiết kế để giữ các thể hiện của lớp).
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]);
Tôi nghĩ rằng nó đáng chú ý là mảng C là một rắc rối cho bất cứ điều gì nhưng tầm thường, sử dụng một lần mà nó thực sự ít rắc rối để bọc bất kỳ mảng bạn có kế hoạch giữ xung quanh như NSArrays của NSNumber. – Chuck
Có, và đưa ra tối ưu hóa mức độ chuyên gia [có lẽ] dưới sự che chở của 'NSArray', tôi chắc chắn bạn sẽ không cảm thấy hiệu suất trúng. – dreamlax
@dreamlax Tôi tự hỏi loại tối ưu hóa cấp độ chuyên gia nào nằm dưới mui xe của NSArray? Phân bổ bộ nhớ thông minh chỉ đơn giản là có thể tăng gấp đôi kích thước của bộ nhớ được cấp phát khi nó đạt đến giới hạn? :) p – Andy
Nếu bạn muốn sử dụng NSArray, bạn cần một lớp Objective-C để đưa vào - do đó yêu cầu NSNumber.
Điều đó nói rằng, Obj-C vẫn là C, vì vậy bạn có thể sử dụng các mảng C thông thường và giữ int thường xuyên thay vì NSNumbers nếu bạn cần.
Bạn có thể sử dụng CFArray thay vì NSArray. Here là một bài viết giải thích cách thực hiện.
CFMutableArrayRef ar = CFArrayCreateMutable(NULL, 0, NULL);
for (NSUInteger i = 0; i < 1000; i++)
{
CFArrayAppendValue(ar, (void*)i);
}
CFRelease(ar); /* Releasing the array */
Điều tương tự cũng áp dụng cho phiên bản CoreFoundation của các vùng chứa khác.
Nếu có một lợi thế của việc sử dụng CFArray trên NSArray, tôi không nhìn thấy nó. Một NSArray LÀ một CFArray dưới mui xe; điều này chỉ làm điều đó một cách khó khăn. –
@Cryptognome có một sự khác biệt nhỏ ở đây, CFArray sẽ không giữ lại hoặc phát hành bất cứ điều gì bởi vì nó được tạo ra mà không có callbacks. Tôi đồng ý mặc dù, dường như không có bất kỳ lợi thế nào. – dreamlax
Tôi nghĩ rằng việc sử dụng NSNumbers dễ dàng hơn rất nhiều. Điều này tất cả bạn cần làm:
NSNumber *myNum1 = [NSNumber numberWithInt:myNsIntValue1];
NSNumber *myNum2 = [NSNumber numberWithInt:myNsIntValue2];
.
.
.
NSArray *myArray = [NSArray arrayWithObjects: myNum1, myNum2, ..., nil];
Tôi tạo ra một C wrapper Mục tiêu đơn giản xung quanh mảng tốt cũ C được sử dụng thuận tiện hơn: https://gist.github.com/4705733
Nếu thứ tự của các số nguyên của bạn không yêu cầu, và nếu chỉ có giá trị duy nhất
bạn cũng có thể sử dụng NSIndexSet hoặc NSMutableIndexSet bạn sẽ có thể dễ dàng thêm và loại bỏ các số nguyên, hoặc kiểm tra xem mảng của bạn có chứa một số nguyên với
0.123.- (void)addIndex:(NSUInteger)index
- (void)removeIndex:(NSUInteger)index
- (BOOL)containsIndexes:(NSIndexSet *)indexSet
Kiểm tra documentation để biết thêm thông tin.
Đó là một ý tưởng khủng khiếp. Đây là một phần từ tài liệu của Apple: _Bạn không nên sử dụng các bộ chỉ mục để lưu trữ một tập hợp các giá trị số nguyên tùy ý vì các bộ chỉ mục lưu trữ các chỉ mục như các dải được sắp xếp. Điều này làm cho chúng hiệu quả hơn lưu trữ một tập hợp các số nguyên riêng lẻ. Điều này cũng có nghĩa là mỗi giá trị chỉ mục chỉ có thể xuất hiện một lần trong chỉ mục set._ –
Tôi đồng ý và đây là lý do tại sao tôi bắt đầu trả lời của mình bằng cảnh báo. Tuy nhiên, tôi biết một số người đã đặt câu hỏi này về mảng số nguyên và thực sự cần một bộ chỉ mục. Đó là lý do tại sao tôi đưa ra câu trả lời thay thế này. –
Có gì sai với một 'NSSet' thông thường (và sử dụng các số nguyên được bọc trong một' NSNumber')? – dreamlax
C mảng:
NSInteger array[6] = {1, 2, 3, 4, 5, 6};
Objective-C Array:
NSArray *array = @[@1, @2, @3, @4, @5, @6];
// numeric values must in that case be wrapped into NSNumbers
Mảng Swift:
var array = [1, 2, 3, 4, 5, 6]
này là đúng quá:
var array = Array(1...10)
NB: mảng được nhập mạnh vào Swift; trong trường hợp đó, trình biên dịch thâm nhập từ nội dung mà mảng là một mảng các số nguyên.Bạn có thể sử dụng cú pháp rõ ràng kiểu này, quá:
var array: [Int] = [1, 2, 3, 4, 5, 6]
Nếu bạn muốn một loạt các đôi, bạn sẽ sử dụng:
var array = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0] // implicit type-inference
hay:
var array: [Double] = [1, 2, 3, 4, 5, 6] // explicit type
- 1. trả về một dãy số nguyên tố
- 2. Tạo một dãy số trong MySQL
- 3. Các dãy số nguyên Python
- 4. Tạo một dãy các số ngẫu nhiên
- 5. Tạo một dãy số tổng cho một số đã cho
- 6. Tổng số các số tạo thành một dãy số
- 7. Một dãy số nguyên làm khóa cho từ điển
- 8. Đếm số lần mỗi bit được đặt trong một dãy số nguyên
- 9. Làm thế nào để tạo mảng với dãy số nguyên trong C#?
- 10. Cách tìm kích thước của dãy số nguyên
- 11. Tuyên bố trường hợp Delphi cho các dãy số nguyên
- 12. Tuyên bố một dãy số nguyên với bước = 1 trong Ruby
- 13. Tìm LCM của một dãy số
- 14. Nhận một dãy số NSDates tương lai
- 15. GUI để đặt dãy số trong Delphi
- 16. Tạo một băm từ một dãy các phím
- 17. Làm thế nào tôi có thể đúc một số nguyên với một id trong iOS
- 18. Khởi tạo std :: mảng với một dãy (cặp vòng lặp)
- 19. Cấu trúc dữ liệu để xây dựng và tra cứu tập hợp các dãy số nguyên
- 20. Json.NET treo khi tuần tự hóa dãy số nguyên không dấu (ulong)
- 21. Trình tạo số ngẫu nhiên tạo số nguyên cho Java
- 22. Tạo một mảng được điền với một dãy các giá trị x qua y
- 23. Làm cách nào để tóm tắt mảng các số nguyên dưới dạng một dãy các dải ô?
- 24. Làm thế nào để chuyển đổi một chuỗi các số thành một dãy số?
- 25. Số nguyên Numpy nan
- 26. State Monad, dãy số ngẫu nhiên và mã đơn điệu
- 27. Làm thế nào để nối một dãy các dãy ("RoR") trong D?
- 28. Làm thế nào để chuyển đổi một số nguyên thành một mảng trong PHP?
- 29. đọc một tệp thành một dãy các dòng trong d
- 30. sử dụng LINQ để tìm tổng tích lũy của một dãy số trong C#
gì bạn muốn làm gì với mảng số nguyên? – dreamlax
Không chắc chắn. Tôi chỉ nghe một nơi nào đó mà bạn phải sử dụng NSNumber cho mảng và vì vậy tôi đã tự hỏi về điều đó. – neuromancer