2010-02-16 28 views
31

tôi đã một NSDictionary trông giống như:NSDictionary đến NSArray?

{ 
"Item1" = 2.4; 
"Item2" = 5.5; 
"Item3" = 15.6; 
} 

Để sử dụng này NSDictionary mục trong một bảng Xem tôi phải chuyển nó vào một NSArray, am i right?

Vì vậy, tôi cố gắng:

NSDictionary *dict = [myDict objectForKey:@"items"]; 

for (id item in dict) { 
    [_myArray addObject:[dict objectForKey:item]]; 
} 

Nhưng _myArray giữ trống rỗng? Tôi đang làm gì sai?

Trả lời

27

Gác lại những vấn đề kỹ thuật với mã bạn đăng, bạn hỏi này:

Để sử dụng từ điển Item trong một bảng Xem tôi phải chuyển nó vào một NSArray, am i phải không?

Câu trả lời là: không nhất thiết. Không có gì thực chất đối với máy móc của UITableView, UITableViewDataSource hoặc UITableViewDelegate điều đó có nghĩa là dữ liệu của bạn phải là nằm trong một mảng. Bạn sẽ cần phải triển khai các phương thức khác nhau để báo cho hệ thống biết có bao nhiêu hàng trong bảng của bạn và dữ liệu nào xuất hiện trong mỗi hàng. Nhiều người cảm thấy tự nhiên và hiệu quả hơn khi trả lời những câu hỏi đó với cấu trúc dữ liệu được sắp xếp như một mảng. Nhưng không có yêu cầu mà bạn làm như vậy. Nếu bạn có thể viết mã để thực hiện những phương pháp đó với từ điển bạn bắt đầu, hãy thoải mái!

+2

Tôi biết đó là một bài cũ, nhưng thưa bạn, bạn đoán suy nghĩ của tôi! – Bogdan

2

Có một vài điều có thể xảy ra ở đây.

Từ điển bạn đã liệt kê là myDict phải không? Nếu vậy, bạn không có đối tượng có khóa là @"items" và biến số dict sẽ không phải là số không. Bạn cần phải lặp qua trực tiếp myDict.

Một điều cần kiểm tra là nếu _myArray là phiên bản hợp lệ của NSMutableArray. Nếu không, phương thức addObject: sẽ tự động không thành công.

Và điều cuối cùng cần kiểm tra là các đối tượng bên trong từ điển của bạn được bao bọc đúng cách trong NSNumbers (hoặc một số loại không nguyên thủy khác).

+0

Không, myDict không phải là ví dụ trình bày ở trên, nó sẽ cho bạn thấy rằng tôi có một NSDictionary của NSDictionarys. Làm cách nào để kiểm tra xem đối tượng của tôi có phải là NSNumbers không? – phx

+0

Xin lỗi, lỗi của tôi! Tôi lạm dụng "addObject". Tôi muốn thêmObjects của NSDictionarys vào mảng của tôi! Vì vậy, tôi phải làm điều đó theo một cách khác! – phx

221
NSArray * values = [dictionary allValues]; 
+0

Hey, tôi muốn thêm đối tượng vào mảng, không chỉ các giá trị. – phx

+24

Nếu bạn đọc tài liệu, 'allValues' trả về mọi đối tượng sẽ được trả về bằng cách gọi' objectForKey: 'cho mỗi khóa trong từ điển. –

+3

Nếu bạn muốn thêm các đối tượng khác, bạn sẽ cần phải thực hiện điều này một NSMutableArray như vậy: 'NSMutableArray * values ​​= [[NSMutableArray alloc] initWithArray: [dictionary allValues]];' –

0

Để có được tất cả các đối tượng trong một cuốn từ điển, bạn cũng có thể sử dụng enumerateKeysAndObjectsUsingBlock: như vậy:

NSMutableArray *yourArray = [NSMutableArray arrayWithCapacity:6]; 
[yourDict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { 
    [yourArray addObject:obj]; 
}]; 
42
NSArray *keys = [dictionary allKeys]; 
NSArray *values = [dictionary allValues]; 
+0

Hai thứ này sẽ cho phép bạn chia các khóa và giá trị của NSDictionary thành hai NSArrays riêng biệt. Rất hữu ích. –

5

Bạn có thể tạo một mảng của tất cả các đối tượng bên trong từ điển và sau đó sử dụng nó như là một nguồn dữ liệu cho TableView.

NSArray *aValuesArray = [yourDict allValues]; 
3

Mã Snippet1:

NSMutableArray *array = [[NSMutableArray alloc] init]; 
NSArray * values = [dictionary allValues]; 
[array addObject:values]; 

Mã Snippet2: Nếu bạn muốn thêm nữa

[array addObject:value1]; 
[array addObject:value2]; 
[array addObject:value3]; 

Và vân vân

Ngoài ra, bạn có thể lưu trữ các giá trị quan trọng từ điển đến arr ay

NSArray *keys = [dictionary allKeys]; 
1

Bạn chỉ cần khởi NSMutableArray bạn

NSMutableArray *myArray = [[NSMutableArray alloc] init]; 
+0

đã làm việc cho tôi! cảm ơn :) –

0

Mã này được thực sự sử dụng để thêm giá trị cho dictionarythrough các dữ liệu vào một Array Theo Key.

NSMutableArray *arr = [[NSMutableArray alloc]init]; 
NSDictionary *dicto = [[NSMutableDictionary alloc]initWithObjectsAndKeys:@"Hello",@"StackOverFlow",@"Key1",@"StackExchange",@"Key2", nil]; 
NSLog(@"The dictonary is = %@", dicto); 
arr = [dicto valueForKey:@"Key1"]; 
NSLog(@"The array is = %@", arr); 
0

Trong Swift 4:

let dict = ["Item1":2.4, "Item2": 5.4, "Item3" : 6.5] 

let array = Array(dict.values) 
Các vấn đề liên quan