2015-07-22 22 views
6

Tôi có một mảng như thế này:Cách nhận nhiều giá trị commons nhất từ ​​mảng và thêm chúng vào giá trị khác?

[2 1 2 4 3 3 1] 

Tôi đang sử dụng này ...

var query = array.GroupBy(item => item) 
    .OrderByDescending(g => g.Count()) 
    .Select(g => g.Key) 
    .First(); 

.. để có được giá trị đầu tiên phổ biến nhất (trong trường hợp này: 2)

Nếu tôi muốn nhận nhiều giá trị (trong trường hợp này là 2,3,1) thì sao?

tôi cần phải thêm các giá trị này sang một mảng tạm thời để kiểm tra xem tempArray.Count này> 1.

+0

Tại sao 2 phổ biến nhất giá trị chứ không phải 3? – DavidG

+0

sửa chữa, chỉ là một chút sai lầm, xin lỗi – abecadlo37

+1

Bây giờ câu hỏi của tôi là: tại sao 3 giá trị phổ biến nhất chứ không phải là 2 ?! – DavidG

Trả lời

1

Nếu bạn muốn để có được tất cả các nhóm gắn cho số lượng hàng đầu, bạn có thể làm điều đó như thế này:

var tmp = array 
    .GroupBy(item => item) 
    .OrderByDescending(g => g.Count()) 
    .Select(g => new { 
     Item = g.Key 
    , Count = g.Count() 
    }).ToList(); 
var res = tmp 
    .TakeWhile(p => p.Count == tmp[0].Count) 
    .Select(p => p.Item) 
    .ToList(); 

Lưu ý rằng việc kiểm tra đối với danh sách tmp đếm được khác không là không cần thiết, bởi vì cách duy nhất điều kiện TakeWhile được thực hiện là khi có ít nhất một mặt hàng duy nhất trong danh sách tạm thời. Nói cách khác, khi tmp trống, điều kiện lambda p => p.Count == tmp[0].Count không bao giờ được tiếp cận và ngoại lệ ngoài phạm vi không bao giờ bị ném.

1

Đây là cách tôi sẽ tiếp cận nó (tách ra mã cho rõ ràng):

//Basic query 
var query = array 
    .GroupBy(i => i); 

//Get the maximum count number 
var maxCount = query 
    .Max(i => i.Count()); 

//Get all the values that have a count of maxCount 
var result = query 
    .Where(i => i.Count() == maxCount) 
    .Select(i => i.Key); 
0

Nếu bạn đang nói rằng bạn muốn top 3 kết quả:

var query = array.GroupBy(item => item) 
    .OrderByDescending(g => g.Count()) 
    .Select(g => g.Key).Take(3); 
+2

Tôi đoán OP không biết có bao nhiêu con số bị ràng buộc. –

+0

Ban đầu nó không rõ ràng trong câu hỏi rằng họ chỉ muốn những con số được gắn đầu trở lại. –

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