2010-06-15 61 views

Trả lời

21

Từ Mảng thực hiện IEnumerable bạn chỉ có thể làm điều này:

var arr = new int[2, 2] {{1,2}, {3, 4}}; 
int max = arr.Cast<int>().Max(); //or Min 
+5

Đối với người tìm kiếm trong tương lai, http://stackoverflow.com/a/641565 cho Mảng Jagged tức là. 'int [] [] SomeArray = ...;', sử dụng 'var Flattened = SomeArray.SelectMany (x => x)' tổng hợp các điều tra viên. Sau đó, bạn chỉ có thể làm 'Flattened.Max()' chẳng hạn. – HodlDwon

+1

Josh: Đúng nếu tôi sai, nhưng cách này trông với tôi, bạn sẽ sao chép toàn bộ mảng vào một mảng phẳng khác chỉ để thực hiện tìm kiếm tối đa, trước hết là phí sao chép, và sau đó là O (n) khác và do đó có độ phức tạp tổng thể khủng khiếp cho một vấn đề đơn giản như vậy. Đôi khi sang trọng và ngắn gọn thực sự không phải là tất cả mọi thứ. – Tom

0

Bạn có thể triển khai Danh sách> và tìm min và max foreach và lưu trữ nó vào Danh sách và sau đó bạn có thể dễ dàng tìm Min() và Max() từ danh sách tất cả các giá trị trong một Danh sách chiều. Đó là điều đầu tiên xuất hiện trong đầu, tôi tò mò về điều này và tôi sẽ xem liệu Google có thể lấy một cách tiếp cận rõ ràng hơn hay không.

+0

Bạn thậm chí sẽ nhận được như thế nào một mảng hai chiều vào một danh sách ở nơi đầu tiên? – devuxer

+0

Ah, tôi nghĩ xa về phía trước, bây giờ tôi nhận ra nếu bạn lấy mảng vào danh sách, bạn có thể sử dụng mã để lấy MIN/MAX ra khỏi cùng một vòng lặp mà tôi hình dung để điền vào Danh sách. :/tis là một tang lâu với không đủ cà phê: D –

+0

Bạn có thể làm phẳng mảng, @devuxer – Zimano

6

Điều này dường như làm việc:

IEnumerable<int> allValues = myArray.Cast<int>(); 
int min = allValues.Min(); 
int max = allValues.Max(); 
0

ở đây là biến thể:

var maxarr = (from int v in aarray select v).Max(); 

nơi aarray là int [, ]

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