2011-09-13 25 views
5

Tôi đang sử dụng danh sách để lưu trữ một cặp giá trị thập lục phân (ví dụ: trong danh sách AD38F2D8, được hiển thị dưới dạng: Giá trị_A: AD 38 F2 D8).Từ điển C# hoặc chỉ tiếp tục sử dụng danh sách?

Câu hỏi của tôi là tôi nên sử dụng Dictionary<string, string> hoặc tôi nên sử dụng Dictionary<string, NewCustomObject> để lưu trữ chuỗi thập lục phân dưới dạng một chuỗi. (Giá trị: [AD, 38, F2, D8]) thay vì (Giá trị: AD38F2D8).

Nó có thể sẽ không tạo ra nhiều sự khác biệt giữa hai.

Với Dictionary<string, string> Tôi sẽ chỉ lưu trữ từng chuỗi hex trong từ điển và sau đó chia chúng thành các cặp tương ứng khi tôi cần chúng. nếu tôi sử dụng số Dictionary<string, NewCustomObject>, tôi sẽ kết thúc trước tiên tách các chuỗi hex trong các cặp tương ứng của chúng và sau đó lưu trữ chúng trong từ điển.

Câu hỏi của tôi là tôi nên sử dụng? Hoặc tôi chỉ nên tiếp tục sử dụng danh sách?

Không hoàn toàn cần thiết để tôi sử dụng Dictionary<string, string> vì tôi vẫn biết chuỗi chỉ mục nào đang ở trên, chỉ là nó sẽ đẹp hơn.

Danh sách Ví dụ:

Index = 0, Value = 3D95FF08 
Index = 1, Value = 8D932A08 

Dictionary<string, string> dụ:

Index = 0, Key = First, Value = 3D95FF08 
Index = 1, Key = Second, Value = 8D932A08 

Dictionary<string, NewCustomObject> dụ:

Index = 0, Key = First, Value = 3D, 95, FF, 08 
Index = 1, Key = Second, Value = 8D, 93, 2A, 08 

LƯU Ý: giá trị Index trong mỗi ví dụ điển chỉ là để hiển thị các corespondence để những người khác, tôi biết một từ điển không có giá trị chỉ mục bu t sử dụng các phím thay thế. nó chỉ làm cho nó dễ dàng hơn để xem xét ví dụ này.

Tôi đã xem chuỗi Từ điển cuối cùng tại đây: C# Dictionary with two Values per Key? Tôi đã tìm kiếm nó như tôi đã sử dụng theo cách đó nhiều lần trong khi viết mã python. bằng cách lưu trữ danh sách các chuỗi trong từ điển.

Cảm ơn bạn đã giúp đỡ!

EDIT

Mỗi chuỗi trong cả hai danh sách hoặc từ điển, sẽ được phân chia theo byte tương ứng của họ. EG.

BYTE 0 1 2 3 to 6 ..... 
HEX AD 12 01 0000859D ..... 

Byte 0 sẽ giữ Index Byte 1 sẽ giữ tham chiếu Byte 2 Flags Byte 3-6: Các Memb_Number_ID

Do đó, nếu tôi chia chúng lên trước khi có thể đưa những trong từ điển Tôi không phải làm điều đó trước khi tôi sử dụng chúng ở vị trí tương ứng của họ vì tôi sẽ phải chia chúng ra để tính toán chỉ số, tham chiếu và cờ.

Cơ sở dữ liệu đã được gửi cho tôi theo định dạng này, tôi buộc phải làm việc với nó theo cách hiện tại, vì vậy tôi không thể thay đổi nó. và chỉ có thể điều chỉnh mã của tôi cho nó.

ví dụ trên sẽ được xuất ra như:

Index Reference Link Flags   Memb_Number_ID 
173  18    +A    John (ID: 34205) 
+1

Tại sao bạn nghĩ về việc chuyển sang từ điển? Mã không có danh sách có hoạt động không? –

+0

Nếu bạn cho chúng tôi biết bạn định sử dụng bộ sưu tập như thế nào, ai đó sẽ cung cấp mẫu mã cùng với đề xuất. Hiện tại, bạn chỉ nói với chúng tôi những gì bạn đang lưu trữ, không phải cách bạn dự định truy cập sau này. –

+0

Mã với các danh sách đang hoạt động tốt, tôi chỉ đang tìm cách làm cho nó dễ dàng hơn để làm việc. mỗi giá trị hệ thập lục phân được lưu trữ trong cơ sở dữ liệu dưới dạng 1 chuỗi, nhưng như đã giải thích ở trên mỗi bộ ký tự trong chuỗi đó có ý nghĩa riêng của chúng, do đó đặt nó vào một từ điển với các cặp chia tách có thể làm mọi việc dễ dàng hơn. – Raskaroth

Trả lời

4

Từ điển không tiếp xúc với các chỉ số, họ không có khái niệm này. Tôi muốn gắn bó với một danh sách:

List<NewCustomObject> myHexValues;

Và nếu bạn cần phải tìm kiếm thông qua nó, bạn có thể sử dụng LINQ. Chỉ sử dụng từ điển nếu bạn cần truy cập nhanh dựa trên khóa được xác định.

Bạn chưa thực sự tuyên bố cách bạn dự định sử dụng bộ sưu tập, vì vậy không ai thực sự có thể cho bạn biết sử dụng một hoặc người khác - Tôi chỉ đoán dựa trên thực tế bạn muốn giá trị chỉ mục.

Cập nhật: nếu bạn muốn truy cập dễ dàng hơn để các yếu tố của giá trị hex, bạn có thể sử dụng một rectangular array hoặc quấn giá trị trong một kiểu tùy chỉnh và tiếp xúc với các thuộc tính cho các phần khác nhau (sự lựa chọn của bạn trên struct vs class, phụ thuộc trên các giá trị tôi giả sử), và sau đó dính vào loại đó trong một danh sách.

Nếu bạn thực hiện kiểu riêng của bạn, bạn có thể expose an indexer nếu bạn muốn để có được cú pháp sau:

myCustomType[indexKey] = value;

+0

thực sự chỉ mục là chỉ có để hiển thị các corresponces vào danh sách. tôi không cần các chỉ mục. nó chỉ hoặc là tôi sẽ làm như myhexvalues ​​[0] hoặc myhexvalues ​​[1]. hoặc từ điển phương pháp tương ứng – Raskaroth

+0

@Raskaroth bạn muốn sử dụng bộ sưu tập như thế nào? Bỏ qua một chút thời gian bạn sẽ sử dụng bộ sưu tập nào. Bạn có muốn khóa thông tin hoặc lặp lại không? –

+0

Nếu bạn muốn "lập chỉ mục" chúng ra, như trong, sử dụng một giá trị không phải là "chìa khóa" của từ điển, thì bạn không thể, bạn cần sử dụng các chỉ mục. –

0

Nếu bạn cần phải liên quan đến hai (hoặc nhiều hơn) giá trị với nhau, một Tuple là những gì bạn cần. Một từ điển là không cần thiết vì bạn không sử dụng một trong các giá trị như một tra cứu (khóa) ... là bạn?

Dựa trên những gì tôi nghĩ bạn là tình huống, tôi muốn nói một bộ sưu tập (danh sách hoạt động tốt) của Tuples.

Ngoài ra, tại sao bạn lưu trữ giá trị Hex dưới dạng Chuỗi? Bạn có thể để nó như một số nguyên và sử dụng String.Format({0:X}, value); để hiển thị nó dưới dạng một chuỗi thập lục phân.

+0

Vì ban đầu nó được lưu trữ trong cơ sở dữ liệu dưới dạng nhị phân, và tôi sử dụng một phương thức được giải thích ở đây: http://stackoverflow.com/questions/6640898/c-asp-net-show-binary-data-from-database. Điều này là khá nhiều sự tiếp nối của mã đó, chỉ cần bây giờ mà tôi đang chia nó lên để làm việc hơn nữa với nó. nó hoạt động, nhưng tôi đang tìm một cách hiệu quả hơn. – Raskaroth

+0

và không, tôi không sử dụng khóa để tra cứu giá trị, tôi không nhất thiết phải có. Quên về tuple mặc dù, cảm ơn cho lời nhắc nhở! – Raskaroth

+0

Tupple sẽ không hoạt động, vì giá trị thập lục phân được lưu trữ 1 sau cái kia, do đó nếu tôi có 8 chuỗi được lưu trữ trong cơ sở dữ liệu đó, và mỗi chuỗi chứa 8 cặp giá trị thập lục phân. sau đó tôi sẽ có một tupple của: 8 * (8 * 2) = 128 giá trị. Và cơ sở dữ liệu của tôi lưu trữ 80 chuỗi thập lục phân trong một giá trị cơ sở dữ liệu, hãy tưởng tượng mức độ tupple lớn như thế nào? hoặc tôi sẽ cần phải tạo ra 80 tupple riêng lẻ với 8 cặp giá trị hex trong chúng. – Raskaroth

0

Tại sao không phân tích cú pháp chuỗi hex ngay lập tức bạn đưa nó vào một đối tượng thực? Bạn đã thể hiện đối tượng trông như thế nào (với chỉ mục, các liên kết tham chiếu, v.v.). Tôi cá nhân phân tích nó thẳng vào một đối tượng Record (hoặc một cái gì đó như thế) và sau đó lưu trữ chúng trong một danh sách. Bằng cách đó, dễ dàng hơn để truy vấn chúng cũng như ở định dạng trực quan hơn lưu trữ chuỗi hex hoặc chuỗi chuỗi hex hoặc bất kỳ thứ gì ...

+0

Thing là 1 chuỗi hex từ cơ sở dữ liệu chứa 80 chuỗi, chứa 8 cặp. đó là lý do tại sao tôi cần một cái gì đó dễ dàng sử dụng hơn. – Raskaroth

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