2012-06-13 34 views
6

Tôi rất mới với từ điển. Ý nghĩa rất mới mẻ mà tôi bắt đầu sử dụng chúng khoảng 6 giờ trước: p. Dù sao, tôi muốn biết nếu có một cách để thay đổi chìa khóa của một từ điển.Thay đổi Khóa của Từ điển

Đây là từ điển của tôi:

Dictionary<string, string> Information = new Dictionary<string, string>(); 

Dưới đây là cách tôi đang bổ sung thêm vào từ điển (điều này được bắn mỗi khi người dùng nhập thông tin và truy cập một nút:

Information.Add(txtObjectNumber.Text, addressCombined); 

Nhu cầu sử dụng để có thể chỉnh sửa cả hai trường cũng như xóa toàn bộ bản ghi.

Vì vậy, khá nhiều ứng dụng cần thêm txtNumbertxtComments w tại đây txtNumber = txtObjectNumber

Cảm ơn sự giúp đỡ của bạn.

+0

Vị trí 'txtNumber' và' txtComments' xuất hiện trong mã của bạn? Bạn có chắc chắn muốn sử dụng từ điển thay vì danh sách các đối tượng lưu trữ hai (hoặc nhiều) giá trị không? –

+3

Có thể bạn không sử dụng đúng cấu trúc dữ liệu. – Oded

+0

xin lỗi đó chỉ là hộp văn bản mà người dùng có thể nhập dữ liệu vào. Tôi chắc chắn phải rõ ràng hơn. – JLott

Trả lời

3

Điều quan trọng là cơ chế cho phép bạn tìm dữ liệu ("giá trị") sau đó.

Ví dụ, nếu bạn đã làm

information.Add("Kris", "Vandermotten"); 

bạn muốn có thể tìm thấy "Vandermotten" trở lại sau này nếu bạn biết "Kris".

Bây giờ trong bối cảnh đó, những gì nó có nghĩa là để thay đổi "Kris"? Bạn đặt dữ liệu dưới cái tên "Kris" và muốn đưa nó trở lại tìm kiếm "Bob"? Bạn sẽ không tìm thấy nó.

Nói cách khác, khóa từ điển rất giống với các khóa chính trong cơ sở dữ liệu quan hệ. Tham chiếu đến nhận dạng lôgíc của giá trị. Vì vậy, đối với một điều, họ nên xác định duy nhất nó.

Vì vậy, có thể ví dụ này không có ý nghĩa. Có thể một cái gì đó như

information.Add(42, new Person("Kris", "Vandermotten") 

có ý nghĩa hơn. Câu hỏi sau đó tất nhiên là: 42 là gì? Đôi khi có một ứng cử viên tự nhiên cho một khóa như vậy, giống như một số nhân viên hoặc một cái gì đó, đôi khi không có.

Khi chẳng có ai, có lẽ bạn cần làm

List<Person> information = new List<Person>(); 

information.Add(new Person("Kris", "Vandermotten")); 

Và dĩ nhiên, nếu một đối tượng Person cho phép thay đổi sở hữu tên đầu tiên, và đó là những gì bạn muốn làm, sau đó làm điều đó. Nhưng "thay đổi các khóa từ điển" không có ý nghĩa gì đối với tôi.

+0

Tôi đã đọc ví dụ của bạn và giống như, nơi ông đã nhận được "Vandermotten" từ. Sau đó, tôi thấy tên của bạn ở cuối. Ý nghĩ duy nhất của tôi là, tên tuyệt vời. – DidIReallyWriteThat

+0

@CalvinSmith Cảm ơn. Bố tôi đưa nó cho tôi. Tôi sẽ vượt qua bình luận của bạn. ;-) –

10

Không thể trực tiếp sửa đổi khóa. Bạn sẽ phải xóa nó và thêm lại.

0

Bạn không thể thay đổi khóa của một mục từ điển hiện có. Những gì bạn có thể làm là xóa khóa trước đó và thêm khóa/giá trị mới dựa trên chỉnh sửa.

trường hợp sử dụng

Ví dụ:

Thêm chính: Tên, Giá trị: Bob

Bây giờ bạn muốn thay đổi Name-FirstName, bạn sẽ phải làm

Tháo chốt Name từ dictionnary Thêm phím : FirstName, Giá trị: Bob

0

Việc sử dụng từ điển của bạn ở đây có vẻ hơi lệch. Giống như tên cho thấy, từ điển nhằm cung cấp cho bạn một cách để "tra cứu" một giá trị, dựa trên khóa. Trong trường hợp của bạn, mặc dù, bạn dường như đang sử dụng nó để lưu trữ hai phần dữ liệu có liên quan, một trong số đó có thể thay đổi. Trong trường hợp đó, có lẽ bạn nên sử dụng danh sách và tạo một lớp riêng biệt đóng gói cả hai phần thông tin. Một cái gì đó như

public class MyData 
{ 
    public string SomeData { get; set; } 
    public string OtherData { get; set; } 
} 

và sau đó

List<MyData> myDataList; 

Hoặc, thậm chí bạn có thể muốn có một cuốn từ điển mà các bản đồ một phím không thay đổi (có thể là một user id) đến lớp tùy chỉnh:

Dictionary<string, MyData> myDataDictionary; 
1

Bạn có thể sử dụng phương thức Remove() tích hợp cho Từ điển của mình. Hoặc bạn có thể làm điều đó một cách khó khăn bằng cách lặp qua bộ sưu tập. Mặc dù tôi tò mò là lý do tại sao bạn sẽ cần phải liên tục cập nhật các phím, và không phải là giá trị mà thôi.

+0

Tôi cần phải làm cả hai. Khá nhiều chìa khóa là số sản phẩm đồng hồ nước. Khi một khóa được thay thế, khóa sản phẩm sẽ thay đổi và các bình luận có thể hoặc không thể thay đổi. Địa chỉ sẽ cần phải giữ nguyên. – JLott

+0

Điều đó nghe có vẻ như bạn cần một từ điển <Địa chỉ, ProductNumber> và một từ điển

+0

Dang ... Tại sao tôi không nghĩ về điều đó haha. Cảm ơn, bạn vừa cứu tôi khỏi phải thay đổi rất nhiều thứ. Nó có thể hơi lộn xộn một chút, nhưng nó sẽ hoạt động haha. – JLott

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