2013-11-01 4 views
1

여기 내 수업을 정렬하려고합니다. 내 코드는 내가 지금은 Column 1 값을 정렬 할 이 사전을 정렬하는 방법

RowList[0]._data[0].Key = "Column 1" 
        .Value = "23" 
      ._data[1].Key = "Column 2" 
        .Value = "Not Important" 
      ._data[1].Key = "Column 3" 
        .Value = "Not Important" 

RowList[1]._data[0].Key = "Column 1" 
         .Value = "11" 
      ._data[1].Key = "Column 2" 
         .Value = "Not Important" 
      ._data[1].Key = "Column 3" 
         .Value="Not Important" 

RowList[2]._data[0].Key = "Column 1" 
        .Value = "8" 
      ._data[1].Key = "Column 2" 
        .Value = "Not Important" 
      ._data[1].Key = "Column 3" 
        .Value = "Not Important" 

를 얻을 내가 내 최종 출력에서 ​​

ObservableCollection<Row> RowList = new ObservableCollection<Row>(); 

같은 관찰 가능한 수집에 그것을 추가 한

public class Row 
{ 
    private Dictionary<string, object> _data = new Dictionary<string, object>(); 
    public object this[string index] 
    { 
     get { return _data[index]; } 
     set { _data[index] = value; } 
    } 
} 

을 다음입니다. 사용할 수있는 Linq 사용할 수 있습니다.

foreach (RowList _r in RowList.OrderBy(p => p.Column1))// I am not sure if this approach is right 
{ 

} 
+2

네, 괜찮습니다. 특별한 염려가 있으십니까? 이것은 사전을 전혀 변경하지 않는다는 것을 유의하십시오. 이것은 동일한 요소를 가지고 있지만 순서가 다른 새로운 시퀀스를 만드는 것입니다. –

+0

그냥 요소를 정렬 한 다음 다른 관찰 가능한 컬렉션에 추가하려고합니다. –

+0

실제로 보면 코드를 컴파일하는 순간조차도 컴파일되지 않습니다. 'Row' 타입에는'Column1' 속성이 없습니다. 사전을 정렬하려고하지 않고 있습니다. 사전의 * 모음 *을 정렬하려고합니다. –

답변

0

어떤 식 으로든 정렬 할 수 있습니다.

RowList.OrderBy(p => (AppropriateDataTypeHere)p.Keys["Column1"]) 

object 변수를 비교할 수 없기 때문에 캐스트가 필요하다 : 그것은 (당신이 직관적으로 가정 할 것) 간단한 속성 액세스를 필요는 없습니다. 당신은 그것을 할 수 있고 비교 규칙을 구현할 수있는 사용자 정의 IComparer<object>을 작성할 수 있습니다.

0

.OrderBy(r => r[0].Key)을 찾는 것처럼 보입니까?

0

귀하와 다른 답변자는 해결책에 매우 가깝습니다. 그것은 사실입니다 :

RowList.OrderBy(p => p["Column1"]) 

클래스는 문자열 (아닌 int)를 취 인덱서 속성이 있습니다.

또한 @ usr의 값 유형에 대한 힌트를 고려해야합니다. 예제에서 모든 값은 문자열입니다. 이것은 그들이 문자열로 분류되어 의미 11, 23, 8

당신은 값의 유형을 변경할 수 있습니다 중 하나 수치를 주문하려면 :

row[0]["Column1"] = 23; // <-- value is int 
row[1]["Column1"] = 11; 
row[2]["Column1"] = 8; 

을하거나 일종의 변환 : 이제

RowList.OrderBy(p => int.Parse(p["Column1"])); 

주문 : 8, 11, 23

관련 문제