盡管堆疊溢位中存在類似的問題,但我的解決方案有一些關于這個問題的問題。我有一個給定的號碼,
例如: int target = 15
然后是鍵值對串列,
var farm = new List<KeyValuePair<string,int>>()
{
new KeyValuePair<string,int>("apple", 25),
new KeyValuePair<string,int>("veges", 35),
new KeyValuePair<string,int>("watermelon", 0),
new KeyValuePair<string,int>("grapes", 10),
}
現在我想根據給定數字 15 和對串列中的第二個元素的差異對串列進行排序。
到目前為止,這是我的解決方案,但沒有進行任何更改:
farm.Sort((prod1, prod2) => Math.Abs(prod1.Value - target) < Math.Abs(prod2 - target)
? prod1.Value : prod2.Value)
預期的排序應該是:
("grapes", 10) // |10-15| = 5
("apple", 25) // |25-15| = 10
("watermelon", 0) // |0-15| = 15
("veges", 35) // |35-15| = 20
任何見解將不勝感激。
uj5u.com熱心網友回復:
List<T>.Sort您正在使用的多載接受委托Comparison<T>。
從docs,對于引數xand y,回傳值指示如下:
| 價值 | 意義 |
|---|---|
| 小于 0 | x 小于 y |
| 0 | x 等于 y |
| 大于 0 | x 大于 y |
目前,您只是回傳Value較小引數的屬性,這與上述標準無關。
您也沒有考慮prod1和prod2相等的情況。
最簡單的解決方案是從另一個中減去一個:
farm.Sort(
(prod1, prod2) => Math.Abs(prod1.Value - target) - Math.Abs(prod2 - target));
或者你可以使用int.CompareTowhich 做同樣的事情:
farm.Sort(
(prod1, prod2) => Math.Abs(prod1.Value - target)
.CompareTo(Math.Abs(prod2 - target)));
uj5u.com熱心網友回復:
試試這個方法:
int target = 15;
var farm = new List<KeyValuePair<string, int>>()
{
new KeyValuePair<string, int>("apple", 25),
new KeyValuePair<string, int>("veges", 30),
new KeyValuePair<string, int>("watermelon", 35),
new KeyValuePair<string, int>("grapes", 10),
};
farm.Sort((prod1, prod2) => Math.Abs(prod1.Value - target).CompareTo(Math.Abs(prod2.Value - target)));
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/335837.html
上一篇:多維陣列中的元素相乘
下一篇:在游戲中捕捉鍵盤?
