2017-06-16 89 views
-1

(對不起,我英文不好)輸入/輸出用戶

檢測記錄我有兩個數組。首先是「老」,然後是「新」。 當有人登錄/退出到我的程序服務器時,發送新陣列。

例如,舊數組是{「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,感謝您的幫助!

+0

'Except'可以讓你添加的用戶肯定 – BradleyDotNET

回答

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 "); 
0

當登錄的用戶數組發生更改時,廣播「用戶X已註銷」消息似乎很愚蠢,因爲您需要不斷地比較兩個陣列。用戶註銷的消息將會重複出現,因爲您需要保留一個「舊」的不變副本,由註冊用戶填寫,並且需要對舊版進行不斷更新的「新」。

比方說,我們有用戶布賴恩,傑克,約翰和麗莎,我們的陣列是這樣的:

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

麗莎註銷,我們通過這兩個循環比較的loggedIn給用戶,並找出誰是在LoggedIn中丟失並廣播。

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

Broadcast: "Lisa has logged out" 

接下來,布萊恩註銷,我們做同樣的事情。循環通過兩個並找出誰是失蹤:

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

因爲我們通過每一個用戶必須循環,即獲得播出的消息是:

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

消息「麗莎已註銷」已經播出兩次,因爲我們必須比較數組並找出誰失蹤。這是處理這種通知的不好方法,因爲您每次比較都會創建重複項。

相反,考慮創建在用戶註銷並從點擊一個按鈕叫,處理的方法:

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的數組。

+0

不,我買了新的數組的事件,然後我想對它們進行比較(廣播信息登錄)和用新的替換舊的數組...因此沒有東西會被複制。我不想在'while(true){...}'中比較它們 – Enter