2011-09-19 2 views
2

현재 다음과 같은 사용자를위한 간단한 클래스가 있습니다.마지막 3 개의 최신 메시지 만 저장하면서 가장 최근에 3 개의 메시지를 보냈습니까?

public class Users 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public Groups Access { get; set; } 
    public IPAddress IP { get; set; } 
    public bool IsProtected { get; set; } 
    public bool IsInvisible { get; set; } 
} 

이제 마지막으로 보낸 3 개의 메시지를 저장하고 새로운 마지막 메시지가 이전 3 개의 메시지와 일치하는지 비교할 수 있습니다. 메시지를 저장하고 목록에서 가장 오래된 메시지를 제거하지 않고 새 메시지를 추가합니다.

처음에 간단하게 문자열 목록을 사용하여 다음과 같이하려고 생각했습니다.

위의 방법은 작동하지만 제거 할 가장 오래된 메시지를 선택하는 방법을 알지 못합니다. 마지막으로 최신 메시지가 나오고이 방법이 괜찮습니까 아니면 더 좋은 방법이 있는지 확인하지 못할 수도 있습니다.

추신 : 내 제목은 다소 혼란스러워 보입니다. 제목에 대한 더 좋은 아이디어가 있다면 알려주거나 pls로 바꾸십시오.

+1

Erm, 여기서 LastMesssages는 정의되어 있습니까? – Amy

+0

사용자 클래스 ofc'Public List LastMessages = new List ();'사용자마다 저장하기를 원했기 때문에 내가 만든 사용자와 사용자 클래스를 저장하게되었습니다. – Prix

답변

2

LinkedList<string>에 메시지를 저장할 수 있습니다. 이렇게하면 간단하게 확인할 수 있습니다.

bool msg_match = user.LastMessages.Any(x => String.Equals(x, msg, StringComparison.OrdinalIgnoreCase)); 
if (msg_match) 
{ 
    // punish user 
    user.LastMessages.Clear(); 
} 
else 
{ 
    // some way to remove oldest message and leave only the 3 newest messages 
    user.LastMessages.AddFirst(mensagem); 
    if (user.LastMessages.Count > 3) 
     user.LastMessages.RemoveLast(); 
} 
+0

지금 당장은 자료를 확인해 주셔서 감사합니다.) – Prix

+0

@Prix : LinkedList와 List의 장점은이 경우에 실제로 배열을 복사 할 필요가 없다는 점입니다. –

관련 문제