[英]how can I count a number from a string
string val = "4 12 441 662 2234 441 441";
在刪除重復項后,我正在嘗試計算重復項。 目前我被卡住了,無法前進。
我想要這個輸出4 12 662 2234 3x 441
你可以像這樣用 Linq 做到這一點:
string val = "4 12 441 662 2234 441 441";
var groupedValues =
val.Split(' ')
.GroupBy(x => x)
.OrderBy(g => g.Count())
.Select(g => g.Count() > 1 ? g.Count() + "x " + g.Key : g.Key);
var result = string.Join(' ', groupedValues);
Console.WriteLine(result); // 4 12 662 2234 3x 441
如下編寫 Linq 會稍微更有效,以避免重新計算Count()
兩次:
var groupedValues =
val.Split(' ')
.GroupBy(x => x)
.Select(f => (count: f.Count(), value: f.Key))
.OrderBy(g => g.count)
.Select(h => h.count > 1 ? h.count + "x " + h.value : h.value);
請注意.OrderBy()
,它確保根據您的原始要求將重復值放在輸出的末尾。
為什么要使用正則表達式?
string val = "4 12 441 662 2234 441 441";
Console.WriteLine(string.Join(" ", val.Split(' ').GroupBy(x => x).Select(x => x.Count() > 1 ? $"{x.Count()}x {x.Key}" : x.Key)));
您可以在字符串中創建一個數字數組,方法是使用空格分隔符將它們分開,然后更容易找出數組中的重復項。
您可以使用 linq。
GroupBy
表達式將所有相同的內容分組。 (分組有一個Key
和一個包含所有匹配項的List
)string val = "4 12 441 662 2234 441 441";
var splitted = val.Split(' ');
var resultString = splitted.ToList()
.GroupBy(el => el)
.Select(grouping => grouping.Count() + "x " + grouping.Key)
.Aggregate("", (s1, s2) => s1 + s2 + ", ");
Console.WriteLine(resultString);
使用LINQ
string val = "4 12 441 662 2234 441 441";
var result = val.Split(" ")
.GroupBy(x => x)
.ToDictionary(y => y.Key, y => y.Count())
.OrderBy(z => z.Value)
.Select(x=> x.Value == 1 ? $"{x.Key}" : $"{x.Value}x {x.Key}")
.ToList();
Console.WriteLine(string.Join(" ", result));
輸出
4 12 662 2234 3x 441
我認為這可以工作:
首先將您的string
作為List
string val = "4 12 441 662 2234 441 441";
var list = val.Split(' ').ToList();
然后獲取重復的值並存儲到具有Value
和Count
的對象中:
var query = list.GroupBy(r => r)
.Select(grp => new
{
Value = grp.Key,
Count = grp.Count()
});
現在你有類似[{Value: X, Count: X}, {...}, {...} ... ]
然后迭代這個列表,你可以創建一個新的string
來輸出
var str = "";
foreach (var item in query)
{
if(item.Count > 1)
{
str += item.Count+"x ";
}
str+=item.Value+" ";
}
Console.WriteLine("str = "+str);
輸出為: str = 4 12 3x 441 662 2234
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.