2011-02-06 43 views
5

Cách đơn giản nhất tôi có thể nghĩ đến là một vòng lặp for:Cách sạch nhất để tìm kiếm một mảng 2D?

var arr=[["hey","oh"],["scar","tissue"],["other","side"]]; 
var query="scar"; 
for(var z=0;z<arr.length;z++){ 
    if(arr[z].indexOf(query) !== -1){ 
     //Found 
     break; 
    } 
} 

Có cách nào khác để tìm kiếm một chuỗi trong một mảng 2D?

+0

Bạn sẽ làm như thế nào? –

+0

Có vẻ tốt cho tôi ... – Robin

+0

Bạn có thể sắp xếp theo thứ tự bảng chữ cái và chạy tìm kiếm nhị phân không? –

Trả lời

11
var arr = [["hey","oh"],["scar","tissue"],["other","side"]]; 
var flat = [].concat.apply([], arr); 
var col = flat.indexOf(query); 
var row = -1; 
if (col != -1) // found, now need to extract the row 
    while (arr[++row].length <= col) // not this row 
    col -= arr[row].length; // so adjust and try again 
+2

+1 để biết cách tạo một mảng 2D 1D! – JCOC611

+0

Bạn có thể thay thế thời gian bằng câu lệnh mod. – tomdemuyt

+2

@tomdemuyt Đúng, hoạt động nếu mảng được biết là hình chữ nhật. – Neil

2

Bạn có thể làm điều này:

var arr=[["hey","oh"],["scar","tissue"],["other","side"]]; 

arr.sort(); 
arr.join(); 

Để sắp xếp theo thứ tự abc sau đó,

Một tìm kiếm nhị phân hoạt động bằng cách nhìn vào giá trị trung trong mảng sau đó nhìn thấy nếu tìm kiếm cho từ khóa/số là> hoặc < giá trị đó và do đó chia mảng thành một nửa, sau đó chia phần còn lại thành một nửa và tiếp tục cho đến khi tìm thấy giá trị tìm kiếm;

enter image description here

Để thực hiện một tìm kiếm nhị phân xin vui lòng đọc tại đây: http://www.timlin.net/csm/cis111/Chapter10.pdf

Slides 52-56 trên ...

Phương pháp này về mặt lý thuyết làm cho tìm kiếm của bạn theo cấp số nhân nhanh hơn.

+0

Điều đó hoạt động tốt cho một mảng số hoặc chuỗi, nhưng không phải là mảng mảng. –

+0

Chắc chắn nếu nó là một mảng của mảng mà làm cho nó một mảng 3D và không 2D? –

+1

Mảng 3D là mảng mảng mảng '[[[]]]', vì vậy nó chỉ là một mảng 2D. – JCOC611

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