Вы спрашиваете, как получить два списка или как найти текущих игроков после того, как вы уже получили два списка?
Вторая часть может быть сделана с Linq ....
List<string> joinedGame;
List<string> leftGame;
List<string> currentInGame
= joinedGame.Where(x => !leftGame.Contains(x)).ToList();
РЕДАКТИРОВАТЬ В ответ на ваш комментарий, прочитав ваш вопрос еще раз, очевидно, что вышеописанное не сработает, потому что вы строите свои списки странным образом.
Вы сохраняете всю строку в списке, например, user_1 has left the game
, то, что вы, вероятно, должны делать, это просто сохранять имя пользователя. Если вы исправите это, то приведенный выше код делает именно то, что вы хотите.
Полный пример:
var input = new List<string>()
{
"user_1 has joined the game",
"user_2 has joined the game",
"user_1 has left the game",
"user_3 has joined the game"
};
var joined = new List<string>();
var left = new List<string>();
foreach(string s in input)
{
var idx = s.IndexOf(" has joined the game");
if (idx > -1)
{
joined.Add(s.Substring(0, idx));
continue;
}
idx = s.IndexOf(" has left the game");
if (idx > -1)
{
left.Add(s.Substring(0, idx));
}
}
var current = joined.Where(x => !left.Contains(x)).ToList();
foreach(string user in current)
{
Console.WriteLine(user + " is still in the game");
}