簡體   English   中英

LINQ 條件選擇和格式化

[英]LINQ conditional selection and formatting

我有一串字符,我正在嘗試設置一個查詢,該查詢會將特定的相似字符序列替換為字符數。 這是我正在嘗試做的一個例子:

agd69dnbd 555 bdggjykbcx 555555 bbb

在這種情況下,我試圖隔離並僅計算數字 5 的出現次數,因此我的輸出應為:

agd69dnbd 3 bdggjykbcx 6 bbb

我當前的代碼如下,其中 GroupAdjacentBy 是一個函數,用於對字符出現次數進行分組和計數,如上所述。

var res = text
.GroupAdjacentBy((l, r) => l == r)
.Select(x => new { n = x.First(), c = x.Count()})
.ToArray();

問題是上述函數對我的字符串中的每個字符進行分組和計數,而不僅僅是我所追求的一個字符。 有沒有辦法只對我需要計算的字符有條件地執行該操作?

正則表達式是比 LINQ 更好的工具。

看看這個:

string input = "agd69dnbd555bdggjykbcx555555bbb";

string pattern = @"5+"; // Match 1 or more adjacent 5 character

string output = Regex.Replace(input, pattern, match => match.Length.ToString());

// output = agd69dnbd3bdggjykbcx6bbb

不確定您是打算每 5 個字符替換一次,還是僅在有多個相鄰的 5 個字符時替換。

如果是后者,只需將您的模式更改為:

string pattern = @"5{2,}"; // Match 2 or more adjacent 5's

Johnathan Barclay 已經給出了最好的答案。 但僅在您需要使用 Linq 進行類似操作並顯示替代解決方案的情況下:

var charToCombine = '5';
var res = text
    .GroupAdjacentBy((l, r) => l == r )
    .SelectMany(x => x.Count() > 1 && x.First() == charToCombine ? x.Count().ToString() : x)
    .ToArray();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM