這是我的清單:
List<string> list = new List<string>
{
"Door Hardware > Door Trim",
"Door Hardware > Door Trim > Pulls",
"Door Hardware > Door Trim > Pulls > Flush",
"Barn Doors & Hardware",
"Barn Doors & Hardware > Barn Door Hardware",
"Door Hardware",
"Brands > Beyerle"
};
我需要從串列中獲取的值是"Door Hardware > Door Trim > Pulls > Flush"
包含最多'>'
.
到目前為止,這是我使用 LINQ 所擁有的:
var myVal = list.Where(s => s.Contains('>')).OrderByDescending(s => s.Length).First();
哪個會回傳"Barn Doors & Hardware > Barn Door Hardware"
哪個不是我需要的。我將衷心感謝您的幫助。
uj5u.com熱心網友回復:
這里的關鍵是您需要兩個級別的排序。
- 按目標字符數降序排列。
- (then) 按字串的長度降序排列。
char target = '>';
string selected = list
.OrderByDescending(entry => entry.Count(letter => letter == target))
.ThenByDescending(entry => entry.Length)
.First();
此處很重要,您使用ThenBy...
,它“附加”到現有排序而不是覆寫現有排序。
現在,您仍然會遇到多個輸入可能具有相同數量的目標字符和字串長度的問題。現在(使用此代碼和您的代碼),它將根據原始串列中的順序選擇第一個。您可能希望在將來更改它。
uj5u.com熱心網友回復:
您可以通過使用List.Sort
. 這看起來像這樣:
list.Sort((x, y) => { return x.Count(s => s == '>') == y.Count(s => s == '>') ? x.Length.CompareTo(y.Length) : x.Count(s => s == '>').CompareTo(y.Count(s => s == '>')); });
我在這里所做的只是:檢查“>”的出現次數是否相等
如果是,按長度排序
如果沒有按“>”出現次數排序。
從該串列中,最后一個元素將是您的結果。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/517617.html
標籤:C#细绳林克
上一篇:如何在二分查找中設定中間值?