2017-05-17 20 views
5

Cách sắp xếp danh sách tăng gấp đôi bằng phần phân số của dấu hai chấm.
ví dụ: Đối với đầu vào <1.2, 2.3, 1.12, 5.1>, sau khi phân loại, sản lượng nên <5.1, 1.12, 1.2, 2.3>Trong C#, làm thế nào để sắp xếp danh sách tăng gấp đôi theo định nghĩa?

+0

bạn đã cố gì? Điều gì đang gây rắc rối cho bạn. Hay là bạn chỉ muốn một ai đó làm công việc cho bạn? Hoặc câu hỏi lịch sử dường như chỉ ra sau này. – TnTinMn

+1

Bạn có biết làm thế nào để có được phần phân đoạn của một đôi? Bạn có biết cách sắp xếp theo quy tắc do người dùng xác định không? Hoặc bạn có thể Google hai bit mã này? Đặt chúng lại với nhau, và bạn có câu trả lời của bạn. –

Trả lời

11

Bạn có thể đạt được điều này thông qua OrderBy()Math.Truncate phương pháp như như sau. Trong đó x-Math.Truncate(x) cung cấp cho bạn số sau dấu thập phân và OrderBy sẽ sắp xếp chúng theo thứ tự tăng dần. Có một cái nhìn tại example này và thử mình với đoạn mã sau

List<double> input = new List<double>(){1.2, 2.3, 1.12, 5.1}; 
input = input.OrderBy(x=>x-Math.Truncate(x)).ToList(); 
Console.WriteLine(String.Join("\n",input)); 

Hoặc bạn có thể thử này cũng .OrderBy(x=>x-(int)x) thay cho OrderBy(x=>x-Math.Truncate(x)

1

Listoverload của Sort() phương pháp mà có một thể hiện của một IComparer<T> . Các interface là khá dễ dàng để thực hiện và sẽ cho phép bạn để sắp xếp theo bất cứ phương pháp nào bạn muốn:

public class MantissaComparer : IComparer<double> 
{ 
    public int Compare(double x, double y) 
    { 
     return Comparer<double>.Default.Compare(x - Math.Truncate(x), y - Math.Truncate(y)); 
    } 
} 

Sau đó, tiêu thụ comparer tùy chỉnh như thế này:

input.Sort(new MantissaComparer()); 

Tôi thấy thẻ linq, nhưng giải pháp này có thể tái sử dụng được trong suốt mã của bạn nếu bạn thấy cần thiết, trong khi tránh "quá kỹ thuật" do giao diện 'IComparer' đơn giản.

+0

Sẽ thu hút sự chú ý. Triển khai tốt –

1

Bạn cũng có thể thử bên dưới mà không sử dụng Math.Truncate

var sortedlist = list.OrderBy(n => n - (int)n).ToList(); 
Console.Write(String.Join(",", sortedlist)); 
Các vấn đề liên quan