2009-03-03 47 views
6

Tôi đã viết sau mã và nó hoạt động quá - nhưng tôi muốn biết liệu họ là tốt hơn cách hơn thế này:Làm thế nào để sắp xếp NameValueCollection bằng cách sử dụng một khóa trong C#?

NameValueCollection optionInfoList = ..... ; 
if (aSorting) 
      { 
       optionInfoListSorted = new nameValueCollection();   
       String[] sortedKeys = optionInfoList.AllKeys; 
       Array.Sort(sortedKeys); 
       foreach (String key in sortedKeys) 
        optionInfoListSorted.Add(key, optionInfoList[key]); 

       return optionInfoListSorted; 
      } 

Trả lời

3

lẽ bạn có thể sử dụng một loại khác nhau của danh sách, có hỗ trợ sắp xếp trực tiếp?

List<KeyValuePair<string, string>> optionInfoList = ...; 
if (sorting) { 
    optionInfoList.Sort((x,y) => String.Compare(x.Key, y.Key)); 
} 
return optionInfoList; 
+0

Tôi cần chuyển thông tin này cho một lớp khác và có Danh sách trong chữ ký phương thức của tôi cho tôi lỗi Phân tích Mã. –

+0

Bạn có cụ thể theo ý nghĩa của "Lỗi phân tích mã" không? – Sung

4

Thay vào đó hãy sử dụng SortedDictionary.

+0

+1; hoặc SortedList <,>, tùy thuộc vào tình huống. –

+5

SortedList và SortedDictionary không cho phép các khóa trùng lặp, có thể buộc một số sử dụng NameValueCollection. –

+1

Nếu một 'NameValueCollection' được sử dụng, và được sắp xếp như được mô tả trong ví dụ với các khóa trùng lặp, thứ tự là không xác định cho các khóa trùng lặp, do đó danh sách thực sự không được sắp xếp, phải không? –

1

Nếu bạn để sử dụng NameValueCollection và bạn không có nhiều mục trong bộ sưu tập, thì không sao. Không cần phải có bất kỳ fancier hơn rằng nếu nó nhận được công việc làm.

Nếu đó là nút cổ chai hiệu suất, sau đó truy cập lại.

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