У меня есть массив строк в следующем формате, где каждая строка начинается с трех символов, указывающих, какой тип данных он содержит. Например:Разграничение данных для конкретного экземпляра повторяющейся строки
ABC | .....
DEF | ...
RHG | 1 ........
RHG | 2 ........
RHG | 3 ........
XDF | ......
Я хочу, чтобы найти какие-либо повторяющиеся строки (РГГ в данном примере) и отметьте последнюю строку с особым характером :
> 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, но я не уверен. Кроме того, я не могу не чувствовать, что есть более оптимальное решение.
+1, спасибо за заметки, я не вижу смысла делать свой ответ таким же, как ваш. –
Wow thanks, не знаю, я мог бы сделать все в одном запросе LINQ! – Otaia
@ Otaia LINQ - действительно мощный инструмент. Вы просто должны знать, как его использовать. – MarcinJuraszek