2017-05-17 48 views
5

Çiftlerin listesi, çiftin kesirli kısmı tarafından nasıl sıralanır. Örn
: girişi <1.2, 2.3, 1.12, 5.1> için, sıraladıktan sonra, çıkış OrderBy() aracılığıyla Sen bunu başarabilirsiniz <5.1, 1.12, 1.2, 2.3>C#, mantissa tarafından çiftlerin listesini nasıl sıralamak için?

+0

kullanmadan aşağıda deneyebilirsiniz? Size sorun ne veriyor. Yoksa işini senin için yapmasını istediğin kişi mi? Ya da soru tarihi, ikincisini belirtiyor gibi görünüyor. – TnTinMn

+1

Çifte kesirli parçanın nasıl alınacağını biliyor musunuz? Kullanıcı tanımlı bir kural ile nasıl sıralanacağını biliyor musunuz? Yoksa bu iki kod bitevi yapabilir misiniz? Onları bir araya getir ve cevabını al. –

cevap

11

ve aşağıdaki gibi Math.Truncate yöntem olmalıdır. x-Math.Truncate(x), ondalık noktadan sonraki sayıyı verir ve OrderBy onları artan sırada düzenler. Bu example göz at şu ön

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)); 

kendinizi deneyin Yoksa OrderBy(x=>x-Math.Truncate(x)

1

List yerine bu yanı .OrderBy(x=>x-(int)x) deneyebilirsiniz bir IComparer<T> bir örneğini alır Sort() yöntemin bir overload sahiptir . interface uygulamak oldukça kolaydır ve istediğin her yöntem göre sıralamak için izin verir: Ben linq etiketi bkz

input.Sort(new MantissaComparer()); 

, ancak bu çözüm:

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)); 
    } 
} 

O zaman bu gibi özel karşılaştırıcısı tüketmek Basit 'IComparer' arayüzü nedeniyle "aşırı mühendislik" kaçınarak, gerekli bulmalı, kod boyunca daha fazla yeniden kullanılabilir.

+0

Cazibe çekecek. Güzel uygulama –

1

Ayrıca çalıştılar Ne Math.Truncate

var sortedlist = list.OrderBy(n => n - (int)n).ToList(); 
Console.Write(String.Join(",", sortedlist)); 
İlgili konular