检测登录/注销用户

时间:2017-06-16 23:06:01

标签: c# arrays linq calculation

(抱歉英文不好)

我有两个数组。首先是“旧”,接下来是“新”。 当有人登录/退出我的程序服务器时,会发出新阵列。

例如旧数组是{“Thomas”,“Eliza”},新数组只有{“Thomas”}。现在我想找到已被更改的内容(并将其广播为“Eliza已被注销”)

所以从这两个数组中我想得到接下来的两个像Removed和Added。

示例B :(伪代码)

string[] old = {"Thomas", "Eliza"} 
string[] new = {"Thomas", "Eliza", "Beth"}

string[] added = //magic code
string[] removed = //magic code 2

if (added.length > 0) {
//broadcast logins
}
if (removed.length > 0) {
//broadcast logouts
}

我可以使用Linq,谢谢你的帮助!

2 个答案:

答案 0 :(得分:1)

您可以使用以下代码:

    string[] Old= new string[3]{"Thomas", "Eliza","John"};
    string[] New= new string[3]{"Thomas", "Eliza", "Beth"};
    var intersect = New.Intersect(Old, StringComparer.InvariantCultureIgnoreCase).ToArray();
    var loggedIn = New.Where(x=> !intersect.Contains(x)).Select(x=>x).ToList();
    var loggedOut = Old.Where(x=> !intersect.Contains(x)).Select(x=>x).ToList();
    foreach(var s in loggedIn)
      Console.WriteLine(s + " has logged in ");
    foreach(var s in loggedOut)
      Console.WriteLine(s + " has logged out ");

答案 1 :(得分:0)

播放"用户X已退出"似乎很愚蠢。登录用户数组发生更改时的消息,因为您需要不断地比较两个阵列。用户已经注销的消息将被重复,因为您将保留一个旧的"的常量副本,填充注册用户和不断变化的"新"这需要与旧的检查。

让我们说我们有用户Brian,Jack,John和Lisa,我们的数组看起来像这样:

Users[Brian, Jack, John, Lisa]
LoggedIn[Brian, Jack, John, Lisa]

Lisa注销,我们通过循环浏览两者来比较LoggedIn和用户,并找出LoggedIn和广播中缺少的人。

Users[Brian, Jack, John, Lisa]
LoggedIn[Brian, Jack, John]

Broadcast: "Lisa has logged out"

接下来,Brian退出,我们做同样的事情。遍历两者并找出谁失踪:

Users[Brian, Jack, John, Lisa]
LoggedIn[Jack, John]

因为我们必须遍历每个用户,所以广播的消息是:

"Brian has logged out"
"Lisa has logged out"

消息" Lisa已退出"已被播放两次,因为我们必须比较数组并找出谁失踪。这是处理此类通知的一种不好方法,因为您每次比较时都会创建重复项。

相反,请考虑创建一个方法来处理用户何时注销并从按钮单击调用:

private void btnLogOut_Click(object sender, EventArgs e)
{
    LogOut(user);
}

private void LogOut(string username)
{
    //Remove username from LoggedIn array
    //Broadcast: username + " has logged out."
}

这样,您可以更轻松地管理谁登录,因为您不必使用循环来比较用户和LoggedIn数组。

相关问题