如何根據double的小數部分對雙精選列表進行排序。
E.g:對於輸入<1.2, 2.3, 1.12, 5.1>
,排序後,輸出 應<5.1, 1.12, 1.2, 2.3>
在c#中,如何通過尾數排序雙打列表?
5
A
回答
11
可以實現這一點通過OrderBy()
和Math.Truncate
方法如下所示。其中x-Math.Truncate(x)
爲您提供小數點後的數字,OrderBy
將按升序排列它們。看看這個example,並嘗試一下下面的代碼段
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));
或者你可以嘗試這個問題,以及.OrderBy(x=>x-(int)x)
而不是爲OrderBy(x=>x-Math.Truncate(x)
1
List
有Sort()
方法接受一個IComparer<T>
實例的overload 。該interface是很容易實現,而且可以讓你通過任何你想要的方式進行排序:
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));
}
}
然後消耗的自定義比較是這樣的:
input.Sort(new MantissaComparer());
我看到linq
標籤,但這種解決方案如果您覺得有必要,可以在整個代碼中重複使用,同時避免由於簡單的'IComparer'界面導致的「過度工程」。
+0
將炒鍋的魅力。很好的實施 –
1
您也可以嘗試不使用Math.Truncate
var sortedlist = list.OrderBy(n => n - (int)n).ToList();
Console.Write(String.Join(",", sortedlist));
相關問題
- 1. 通過索引列表在c中排序字符串列表#
- 2. 通過排序列表列
- 3. c#中的數據表的通用列表如何排序#
- 4. 通過列集合在C#中對列表進行排序
- 5. NullPointerException通過排序列表
- 6. 排序雙打
- 7. 排序雙打
- 8. 如何創建一個雙打數組中的雙打列表
- 9. lisp通過函數排序列表
- 10. 如何在Vertica數據庫中通過數字排序varchar列?
- 11. 在C#中排序列表#
- 12. 在c中排序列表#
- 13. 如何雙向排序python列表,按降序排列數字,按升序排列字母排序?
- 14. 如何排序在C#中的數據表列表?
- 15. 通過Rails中的表格列排序
- 16. 在c中的數組列表排序#
- 17. C#中的通用列表排序#
- 18. 排序雙向列表
- 19. 如何在PHP中通過鍵降序排列數組?
- 20. 通過首選排序過濾列表
- 21. 如何通過自定義函數對列表進行排序?
- 22. 如何樣雙打在C#中的列表
- 23. 在C排序問題雙向鏈表
- 24. 雙鏈錶快速排序在C
- 25. 如何通過用戶事件更改SAPUI5中列表的排序或排序?
- 26. 通過排序字典在python通過使tuplles排序列表不起作用
- 27. 如何通過在下拉列表中雙擊來提交值?
- 28. 通過多列列排序
- 29. 扭轉雙尾列表從尾到頭
- 30. C++中的雙重排序
你有什麼企圖下面?什麼給你帶來麻煩。還是你只是想讓一些人爲你做這項工作?或者問題歷史似乎表明後者。 – TnTinMn
你知道如何獲得雙倍的小數部分嗎?你知道如何用用戶定義的規則排序嗎?或者你可以谷歌這兩位代碼?把它們放在一起,你有你的答案。 –