2009-07-16 38 views
17

Tôi có hai mảng trong Mục tiêu C và tôi cần tìm thứ gì đó chỉ mục để tôi có thể chèn nó vào cùng một vị trí. Ví dụ, cho phép nói rằng tôi có một "mảng tên" và một "mảng tuổi". Làm cách nào để tìm ra chỉ mục "charlie" nằm trong "mảng tên" để tôi biết vị trí chèn tuổi của mình vào mảng "tuổi"?Làm cách nào để xác định chỉ mục mảng trong Mục tiêu C?

Cảm ơn

Trả lời

38

-[NSArray indexOfObject:] dường như là lựa chọn hợp lý.

+0

Có nó sẽ chuck, nhờ tôi không thể tìm thấy trong tài liệu tham khảo lớp NSMutableArray. – Xcoder

+4

Đúng, tài liệu NSMutableArray chỉ chứa các phương thức có liên quan đến các mảng đột biến. Nó luôn luôn đáng giá để kiểm tra các tài liệu siêu lớp là tốt. – Chuck

+1

Các tài liệu giúp bạn dễ dàng quên kiểm tra các phương pháp, các thuộc tính và các thuộc tính được kế thừa. Nhận bản thân ứng dụng AppKiDo của Andy Lee và sẽ dễ dàng hơn để xem những gì bạn có thể bị thiếu. Một số lớp học dễ hiểu hơn khi bạn nhìn thấy chúng dưới ánh sáng mới. – uchuugaka

4

Bạn có thể chỉ muốn sử dụng NSDictionary, nếu bạn đang thực hiện tra cứu dựa trên chuỗi.

+0

Đó là một điểm tuyệt vời. Mọi người thường bỏ qua thực tế là việc tìm kiếm một mảng cho một chuỗi đã cho mất thời gian tuyến tính, trong khi tìm kiếm một chuỗi trong một từ điển có thời gian không đổi. Chuck là chính xác về làm thế nào để làm điều đó cho mảng, nhưng dựa trên mô tả thưa thớt, một từ điển có vẻ như một giải pháp tiềm năng lớn. –

+2

Mặc dù vậy, đáng nhớ rằng thời gian tuyến tính có thể nhanh hơn thời gian không đổi nếu hằng số lớn hoặc đường thẳng ngắn. Về cơ bản, đừng lo lắng về nó cho đến khi bạn đã xác nhận bằng cách đo lường rằng nó thực sự là một vấn đề hiệu suất. –

6

Trong ca cao, các mảng song song là một con đường dẫn đến sự diệt vong và hủy hoại. Bạn không thể sử dụng chúng hiệu quả với Bindings, vì vậy bạn sẽ phải viết rất nhiều mã keo thay vào đó, như thể Bindings không tồn tại. Hơn nữa, bạn đang tiêu diệt mọi hỗ trợ AppleScript/Scripting Bridge trong tương lai mà bạn có thể có trước khi bạn bắt đầu triển khai nó.

Cách chính xác là tạo một lớp mô hình với các thuộc tính nameage và có một loạt các cá thể của lớp đó. Sau đó, để tìm một mục theo tên hoặc tuổi, hãy sử dụng NSPredicate để lọc mảng và indexOfObjectIdenticalTo: để tìm chỉ mục của mỗi mục từ mảng được lọc trong mảng chính.

Sự khác biệt giữa indexOfObject:indexOfObjectIdenticalTo: là cựu sẽ gửi isEqual: thông điệp để xác định xem mỗi đối tượng là người nó đang tìm kiếm, trong khi sau này sẽ chỉ tìm kiếm các đối tượng cụ thể mà bạn được thông qua năm. Vì vậy, bạn có thể sử dụng indexOfObject: với một đối tượng không có trong mảng nhưng bằng một đối tượng, để tìm đối tượng bằng nhau trong mảng.

Các vấn đề liên quan