У меня есть оператор foreach
, где я просматриваю несколько строк из текстового файла, где я обрезал и отсортировал строки, которые мне нужны. То, что я хочу сделать, - подсчитать, сколько раз присутствует идентичная строка. Как мне это сделать?C# подсчет одинаковых строк из текстового файла
Вот мой код. Это второе if
заявление, где я застрял:
foreach (string line in lines.Where(l => l.Length >= 5))
{
string a = line.Remove(0, 11);
if ((a.Contains(mobName) && a.Contains("dies")))
{
mobDeathCount++;
}
if (a.Contains(mobName) && a.Contains("drops"))
{
string lastpart = a.Substring(a.LastIndexOf("drops"));
string modifiedLastpart = lastpart.Remove(0, 6);
}
Вот что некоторые из линий выглядеть следующим образом:
мешок монет
siog бренди
мешок монет
мешок с монетами
th е Cath Щит
оборванный свиток
Так что им пытаются сделать, подсчитывая есть 3 линии с мешком монет. Но мне нужно сделать так, чтобы это могло быть все, theres список перечней, который огромный. Так косяк добавить все эм, заняло бы слишком долго
EDIT
private static void Main()
{
int mobDeathCount = 1;
int lootCheckCount = 1;
string[] lines =
System.IO.File.ReadAllLines(@"C:\Users\Michael\Documents\Electronic Arts\Dark Age of Camelot\chat.log");
Console.WriteLine(
"Enter which mob you want to see, remember to include the, for an example; The siog seeker, remember to start with a capital T");
string mobName = Console.ReadLine();
foreach (string line in lines.Where(l => l.Length >= 5))
{
string a = line.Remove(0, 11);
if ((a.Contains(mobName) && a.Contains("dies")))
{
mobDeathCount++;
}
if (a.Contains(mobName) && a.Contains("drops"))
{
string lastpart = a.Substring(a.LastIndexOf("drops"));
string modifiedLastpart = lastpart.Remove(0, 6);
var lineCountDict = modifiedLastpart.GroupBy(x => x).Where(x => x.Count() > 1).ToDictionary(x => x.Key, x => x.Count());
foreach (var val in lineCountDict)
{
Console.WriteLine(val.Key + " - " + val.Value);
}
новых линий;
[01:09:55] Искатель siog бросает мешок с монетами.
[01:09:55] Искатель siog бросает коньяк siog.
[01:09:55] Искатель siog умирает!
[1:09:55] Вы получаете 3687564 очки опыта. (1638917 бонуса лагеря)
[1:10:31] Вы бросаете Мало Покупается Извержение заклинания!
[01:10:31] Вы ударяете искателя siog за 424 (+18) урона!
[01:10:31] Искатель siog бросает мешок с монетами.
[01:10:31] Вы получаете 18 серебряных и 88 медных кусков.
[1:10:31] siog искатель умирает
ли вы имеете в виду, сколько раз он присутствует в _single line_? – DonBoitnott
Что такое «застряли» во втором заявлении? Из описания, 'mobDropCount ++' было бы достаточно, но я подозреваю, что вы заинтересованы в подсчете *, что * упал, нет? Для этого рассмотрим [Словарь] (http://msdn.microsoft.com/en-us/library/xfhwa508.aspx), где имя сброшенной вещи - это ключ, а количество раз - это значение. Также ищите «C# частотную карту» или «C# гистограмму» на SO, так как многие подходы будут использовать словарь. –
user2246674
Нет, я имею в виду, если есть три строки, которые точно такие же, я могу подсчитать их. Надеюсь, что я сделаю свое ясное достаточно :) – Winkz