2014-04-25 1 views
3

단어 목록을 발견 된 페이지 순서대로 나열하고 싶습니다.직사각형 목록 순서

the quick brown 
fox jumped 

나는 단어의 텍스트를 포함하는 사용자 정의 Word 개체의 목록을 가지고 있고, 그것은 남아 (그런 경우 여러 줄을 포함), 오른쪽, 상단 및 하단 값 (0, 0) 페이지의 왼쪽 상단에 있습니다.

words.Add(new Word() { text = "the", box = new rectangle() { left = 10, right = 30, top = 10, bottom = 21 }); 
words.Add(new Word() { text = "brown", box = new rectangle() { left = 65, right = 95, top = 11, bottom = 20 }); 
words.Add(new Word() { text = "jumped", box = new rectangle() { left = 36, right = 64, top = 26, bottom = 38 }); 
words.Add(new Word() { text = "quick", box = new rectangle() { left = 35, right = 60, top = 11, bottom = 24 }); 
words.Add(new Word() { text = "fox", box = new rectangle() { left = 10, right = 30, top = 25, bottom = 35 }); 

internal class Word 
{ 
    internal Rectangle box { get; set; } 
    internal string text { get; set; } 
} 

왼쪽 묶음으로 주문하면 한 줄을 쉽게 주문할 수 있지만 두 줄은 내 뇌를 아프게합니다 (금요일입니다). 모든 의견 ???

+0

ps. 내 "Rectangle"이 너비와 높이가 올바른 형식이 아니라는 것을 알고 있습니다. 이해를 위해 단순화했습니다. – Milne

답변

4

OrderBy을 사용하고 ThenByLINQ에 넣고 X 위치로 정렬 한 다음 Y 위치로 정렬합니다.

List<Word> sortedWords = words.OrderBy(w => w.box.Left).ThenBy(w => w.box.Top).ToList(); 
+0

멋져요. 'ThenBy'함수를 사용한 적이 없습니다. 지금 사용해 보겠습니다. – Milne

+1

' OrderBy'는 전체 시퀀스를 재정렬하지만'ThenBy'는 주어진 속성에 따라 재 배열됩니다 (예 : SAME이 'X'인 모든 값에 대해 'Y'로 주문합니다) – Cyral

+0

완벽합니다! – Milne