次の形式の文字列の配列があります。各文字列は、含まれるデータの種類を示す一連の 3 文字で始まります。例えば:
ABC|.....
DEF|...
RHG|1........
RHG|2........
RHG|3........
XDF|... ...
繰り返し行 (この例では RHG) を見つけて、最後の行を特殊文字でマークしたいと考えています。
>RHG|3........
これを行う最善の方法は何ですか?私の現在のソリューションには、行ヘッダーを数え、ヘッダー数で辞書を作成する方法があります。
protected Dictionary<string, int> CountHeaders(string[] lines)
{
Dictionary<string, int> headerCounts = new Dictionary<string, int>();
for (int i = 0; i < lines.Length; i++)
{
string s = lines[i].Substring(0, 3);
int value;
if (headerCounts.TryGetValue(s, out value))
headerCounts[s]++;
else
headerCounts.Add(s, 1);
}
return headerCounts;
}
主な解析方法では、繰り返される行を選択します。
var repeats = CountHeaders(lines).Where(x => x.Value > 1).Select(x => x.Key);
foreach (string s in repeats)
{
// Get last instance of line in lines and mark it
}
これは私が得た限りです。別のLINQクエリでやりたいことができると思いますが、よくわかりません。また、もっと最適な解決策があると感じずにはいられません。