2012-04-21 32 views
5

Tôi có một cuốn từ điển được sắp xếp như thế này:Làm cách nào để chọn 10 từ khóa hàng đầu từ một từ điển trong .NET?

var sortedDict = (from entry in dd 
        orderby entry.Value descending select entry 
       ).ToDictionary(pair => pair.Key, pair => pair.Value); 

Làm thế nào tôi có thể chọn top 10 từ điển được sắp xếp này?

+2

Tăng tỷ lệ nhận. Chấp nhận câu trả lời giúp bạn thoát khỏi vấn đề và nâng cao kiến ​​thức của bạn –

Trả lời

5

Kể từ khi bạn đặt hàng từ điển của bạn descending, sau đó Take ing 10 kết quả đầu tiên sẽ được chọn TOP 10:

var sortedDict = (from entry in dd 
        orderby entry.Value descending 
        select entry 
       ).Take(10) 
        .ToDictionary(pair => pair.Key, pair => pair.Value); 
+0

cảm ơn bạn rất nhiều, thực sự đánh giá cao – Dedar

21

Như bạn đề cập đến giảm dần trong truy vấn của bạn, tôi cho rằng bạn cần 10 lần xuất hiện. Nếu vậy

var sortedDict = (from entry in dd orderby entry.Value descending select entry) 
        .Take(10) 
        .ToDictionary(pair => pair.Key, pair => pair.Value) ; 


    var sortedDict = dd.OrderByDescending(entry=>entry.Value) 
        .Take(10) 
        .ToDictionary(pair=>pair.Key,pair=>pair.Value); 

Nếu bạn cần 10, chỉ cần xóa descending và nó sẽ hoạt động tốt.

var sortedDict = (from entry in dd orderby entry.Value select entry) 
        .Take(10) 
        .ToDictionary(pair => pair.Key, pair => pair.Value) ; 


var sortedDict = dd.OrderBy(entry=>entry.Value) 
        .Take(10) 
        .ToDictionary(pair=>pair.Key,pair=>pair.Value); 
+0

Cảm ơn bạn rất nhiều. nó hoạt động rất tốt – Dedar

+4

@Dedar [Vui lòng chấp nhận nó như một câu trả lời] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) nếu nó hữu ích. – Marshal

1

Bạn cần phải sử dụng các phương pháp Take():

var sortedDict = (
    from entry in dd 
    orderby entry.Value descending 
    select entry) 
    .Take(10) 
    .ToDictionary(pair => pair.Key, pair => pair.Value); 
1
var sortedDict = (from entry in dd orderby entry.Value descending select entry) 
       .Take(10).ToDictionary(pair => pair.Key, pair => pair.Value); 

này sẽ hiệu quả hơn nếu bạn mất 10 đầu tiên và sau đó chuyển đổi chúng vào từ điển. Trong trường hợp ngược lại nó sẽ chuyển đổi tất cả chúng thành từ điển trước và sau đó lấy 10 trong số đó. Điều này sẽ có hiệu quả nếu chúng ta có một danh sách lớn để lựa chọn.

+0

cảm ơn bạn rất nhiều – Dedar

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