2010-03-11 39 views
6

Tôi đang cố gắng làm tròn các trường hợp khi sử dụng bản đồ (tập hợp các mục nhập giá trị khóa) có ý nghĩa. Cho đến nay tôi có hai loại (xem bên dưới). Giả sử tồn tại nhiều hơn, chúng là gì?Khi nào thì sử dụng bản đồ có ý nghĩa?

Vui lòng giới hạn mỗi câu trả lời cho một danh mục duy nhất và đưa ra một ví dụ.


giá trị tài sản (like a bean)

age -> 30 
sex -> male 
loc -> calgary 

Presence, với O (1) hiệu suất

peter -> 1 
john -> 1 
paul -> 1 
+1

Ví dụ thực tế: Khi bạn cần một bộ và tất cả được xây dựng trong ngôn ngữ của bạn là bản đồ, bản đồ giá trị cho [bất kỳ loại nhỏ] là một thay thế khá. – Brian

+0

Để nói sự thật, tôi chỉ không hiểu câu hỏi là gì. Về cơ bản, danh sách là vô hạn miễn là có cái gì đó trong vũ trụ chưa được liên kết với cái gì khác. Ít nhất tôi sẽ không biết cách đánh giá các câu trả lời .... –

+0

@andras: Vâng, những gì bạn có thể lập mô hình với một bản đồ ** là ** vô hạn. Nhưng phải có phân loại/phân loại/nhóm cho các mô hình này. Tôi sẽ chọn câu trả lời hấp dẫn nhất. – kiwicptn

Trả lời

1

Nếu ngôn ngữ của bạn cho phép cả hai mảng kết hợp và con trỏ đến chức năng/thủ tục, bạn có thể sử dụng bản đồ để xây dựng một cái gì đó tương tự như hướng đối tượng (xem Perl cho một ví dụ cổ điển).

Xem tại đây để biết more detailed explanation.

+0

Bạn không chắc lắm, nhưng nó khá thú vị. bạn có thể cung cấp một ví dụ? – kiwicptn

+0

Nếu bạn xem cách Perl thêm phần tử OO vào ngôn ngữ, bạn sẽ tìm thấy nhiều thông tin. Về cơ bản nếu bạn có thể sử dụng "chữ ký phương thức" làm khóa và "con trỏ hàm" làm giá trị, bạn có thể sử dụng băm để thêm "Hành vi hướng đối tượng". –

+0

Vì vậy, một chữ ký phương thức (về cơ bản là một chuỗi) ánh xạ tới một hàm như 'paul -> dealWithPaul()'. Làm cho tôi nghĩ về phương pháp nhà máy: 'pizza -> bakePizza()'. Tốt +1. – kiwicptn

5

cấu trúc thưa thớt dữ liệu (ví dụ như một mảng thưa thớt hoặc một ma trận):

0 -> value 
1 -> value 
100 -> value 
105 -> value 

Ngoài ra, tôi cho rằng ví dụ "Hiện diện" bạn liệt kê được thực hiện tốt hơn với cấu trúc Tập dữ liệu (ví dụ: HashSet trong Java hoặc .NET) vì phần "ánh xạ" bản đồ thực sự không cần thiết.

3

Nhớ kết quả chức năng (bộ nhớ đệm, đệm, memoization)

10 -> 2 
20 -> 7 
30 -> zeroesIn(factorial(30)) 
0

Như Eric Petroelje nói, "hiện diện" của bạn ví dụ là phù hợp hơn với một Set hơn một bản đồ.

Tuy nhiên, nếu bạn muốn theo dõi số lần xuất hiện của sự vật, hãy sử dụng Bản đồ. Ví dụ, bạn muốn biết bao nhiêu lần một từ được xuất hiện trong một tài liệu:

giả:

wordMap = map() 
for word in document: 
    if wordMap.containsKey(word): 
     wordMap[word]++ 
    else: 
     wordMap[word] = 1 

sau đó nếu tôi muốn biết có bao nhiêu lần so với từ 'bản đồ' xuất hiện trong tài liệu, nó chỉ là wordMap["map"]

+0

Tôi sẽ tập hợp lại những người đó dưới "biểu đồ", ví dụ: số lần xuất hiện cho từ, điểm số nhận được để kiểm tra, v.v. – kiwicptn

0

Bản đồ là một cách để đại diện cho graph. Các khóa là các nút trong biểu đồ và giá trị cho một nút N cụ thể là danh sách tất cả các nút mà N kết nối đến.

+0

'Giá trị ... là một danh sách.' Khi bạn bắt đầu suy nghĩ như vậy (còn' giá trị là một bản đồ') phạm vi của câu hỏi sẽ phát nổ. Tôi muốn giữ điều này đơn giản với các giá trị vô hướng (hoặc không có kích thước). – kiwicptn

2

chuyển đổi

peter -> pierre 
john -> jean 
paul -> paul 
0

(Cảm ơn bạn đã gắn thẻ lại, MatrixFrog.)

điển (lập bản đồ một thuật ngữ để một định nghĩa)

"postulate" -> "demand or claim" 
"consulate" -> "residence of a foreign official" 

Cũng trong thể loại này

EADDRINUSE -> "Address in use." 
EADDRNOTAVAIL -> "Address not available." 
1

Đi qua số tùy ý các thông số tùy chọn cho một hàm, bằng một ngôn ngữ mà không hỗ trợ chúng:

cars = findAvailableCars(make -> 'Toyota', model -> 'Prius', color -> 'green') 
Các vấn đề liên quan