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