Twoim zadaniem jest wykonanie analizy logowań do pewnego systemu webowego. Otrzymujesz wielowierszowy napis (typu string) zawierający, w kolejnych liniach: datę i czas logowania, login użytkownika oraz numer IP, np.:



Twoim Zadaniem Jest Wykonanie Analizy Logowań Do Pewnego Systemu Webowego Otrzymujesz Wielowierszowy Napis Typu String Zawierający W Kolejnych Liniach Datę I Cz class=

Odpowiedź :

Odpowiedź:

public static void Analyze(string logs)

{

// Konwersja logów na dwuwumiarową tablicę

// [data,czas, login, adres ip]

string[] logLines = logs.Split(Environment.NewLine);

string[,] logSplitedLines = new string[logLines.Length, 4];

for (var i = 0; i < logLines.Length; i += 1) {

 string[] splitedLine = logLines[i].Split();

 logSplitedLines[i, 0] = splitedLine[0];

 logSplitedLines[i, 1] = splitedLine[1];

 logSplitedLines[i, 2] = splitedLine[2];

 logSplitedLines[i, 3] = splitedLine[3];

}

// Przekonwertowanie tablicy na słownik,

// którego kluczami są loginy a wartościami lista adresów ip

// tylko unikatowe adresy ip są dodawane do tej listy

Dictionary<string, List<string>> loginIpDict = new Dictionary<string, List<string>>();

 

for (int i = 0; i < logLines.Length; i += 1) {

 string key = logSplitedLines[i,2];

 string value = logSplitedLines[i,3];

 if (!loginIpDict.ContainsKey(key))

 {

           loginIpDict.Add(key, new List<string>() { value });

 } else

 {

  if (!loginIpDict[key].Contains(value))

  {

   loginIpDict[key].Add(value);

  }  

 }

}

 

// Zbudowanie listy użytkowników którzy logowali się zawsze z tego samego adresu ip

List<string> output = new List<string>();

foreach (var key in loginIpDict) {

 if (key.Value.Count == 1) {

  output.Add(key.Key);

 }

}

// Sortowanie, Odwrócenie kolejności, Zbudowanie łańcucha na podstawie listy

output.Sort();

output.Reverse();

Console.WriteLine(string.Join(", ", output));

}

Wyjaśnienie:

Tutaj możesz sprawidzić jak działa powyższa metoda:

https://dotnetfiddle.net/Hm1ukH