2009-11-17 4 views
0

입니다 XMLMessage이 구조체입니다 사전에 설정 요소는 내가 Dictionary<string, XMLMessage>를 비 웁니다 값을 할당하는 사전 개체와 DateTime 개체 사이의 간격 (초)입니다.LINQ 날짜 시간 값이 가장 오래된

어떤 시점에서 사전에 키를 유지해야하지만 가장 오래된 값은 비어 있어야합니다.

나는 이것을 시도했지만 제대로 된 것 같지 않습니다.

storedMessages.Where(x => x.Key.Contains("1")).OrderBy(s => s.Value.TimeRead).Skip(1) 

감사

업데이트 : 나는 이런 식으로 뭔가를 할 수 있다고 생각하지만 의견

var j = storedMessages.Where(x => x.Key.Contains("1")).OrderByDescending(s => s.Value.TimeRead).First().Key; 
storedMessages[j] = new XMLMessage(); 
얻고 싶었다
+1

어떤 항목을 선택합니까? 그건 나에게 도움이 될 것 같아 ... – JustLoren

+1

SortedDictionary 사용을 고려 했습니까? 들어오는 메시지는 storedMessages Dictionary에 항상 추가됩니다. 즉, 사전에 이미 추가 된 이전 DateTime보다 이전에 DateTime이있는 메시지를 추가하지 않으시겠습니까? 들어오는 메시지가 순차적이면 SortedDictionary를 단순히 증가 된 카운터로 키를 사용하면 항상 목록의 시작 부분에 "가장 오래된 항목"이 있다는 것을 의미합니다. 해당 항목의 DateTime 값을 비워두면 카운터 변수를 전진시켜 가장 오래된 항목을 가리키는 포인터를 갖게됩니다. – BillW

+0

@BillW : 답변으로하지 않는 이유는 무엇입니까? –

답변

1

예, 업데이트 된 버전 괜찮아 보인다 - 나는 말하고 싶지만 있지만, 인생을 더 쉽게하기 위해 사전뿐만 아니라 시간 순서로 목록을 저장하는 것이 좋습니다.

나는 강력하게을 사용하면 가변 구조체를 사용하지 않아도됩니다. 클래스를 사용하거나 변경할 수 없도록 구조체를 변경하십시오. 그것을 불변의 구조체 제작

private class XmlMessage 
{ 
    public string Message { get; set; } 
    public DateTime TimeRead { get; set; } 
} 

예 : 그것을 클래스 만드는

예 물론

private struct XmlMessage 
{ 
    private readonly string message; 
    private readonly DateTime timeRead; 

    public string Message { get { return message; } } 
    public DateTime TimeRead { get { return timeRead; } } 

    public XmlMessage(string message, DateTime timeRead) 
    { 
     this.message = message; 
     this.timeRead = timeRead; 
    } 
} 

당신이 그것을 대신 불변의 클래스를 만들 수를 ...

+0

두 가지 모두 확실하지 않습니다. 카운트 - 더 설명하거나 예제를 제공 할 수 있습니까? – Jon