2010-07-22 3 views
0
Dictionary<string,string> items = new Dictionary<string,string>(); 

IEnumerable<string> textvalues = from c in......//using linQ to query 

string s = textvalues[items["book"]]; 

이 경우 textvalues ​​배열은 문자열 값을 반환 할 정수 값을 허용합니다. 항목 번호를 가져올 수있는 방법은 "항목"에 5 개의 항목 이름이 있고 "책"이 첫 번째 위치에 있고 그 다음에는 0을 가져야합니다. . 텍스트 값 [items [0]]은 사전 항목의 주문 번호를 얻는 방법이 있습니까?

좋아요. Excel을 읽으려고 OpenXML 2.0을 사용하려고했습니다. 여기 요점은 내가 지정할 수있는 방법이 없습니다. 필드 이름과 가치를 얻을. 그래서 워크 시트의 첫 번째 행을 반복하려고했는데 사전 fieldItems에 값을 추가합니다. 그래서 fieldItems [ "Status"]라고 말하면 열 값을 기반으로 셀 값을 검색합니다. column header name.ok 여기에 대한 코드가 있습니다.

 Dictionary<string, int> headers = new Dictionary<string, int>(); 
     IEnumerable<string> ColumnHeaders = from cell in (from row in worksheet.Descendants<Row>() 
              where row.RowIndex == 1 
              select row).First().Descendants<Cell>() 
              where cell.CellValue != null 
              select 
              (cell.DataType != null 
               && cell.DataType.HasValue 
               && cell.DataType == CellValues.SharedString 
              ? sharedString.ChildElements[ 
               int.Parse(cell.CellValue.InnerText)].InnerText 
              : cell.CellValue.InnerText); 


      int i=0; 
     Parallel.ForEach(ColumnHeaders, x => { headers.Add(x,i++); }); 


order.Number = textValues[headers["Number"]]; 
+0

IEnumerable 에 인덱스 접근자가 있습니까? 대신 IList 을 사용해야 할 수도 있습니다. –

+1

IEnumerable 에는 인덱스 접근자가 없습니다. – TheFogger

+0

아직 실제로 textvalues가 무엇인지는 분명하지 않지만 * 당신을 도울 수있는 방법으로 내 대답을 편집했습니다 ... –

답변

0

(터무니, 나는 결국 그것을 오해하지 않았고, 편집 역사가는 처음 5 분 없습니다.)

귀하의 질문이 다소 혼동 제시 ...하지만 처럼 보인다 기본적으로 사전 내에서 항목의 "위치"를 찾으려고합니다. Dictionary<TKey, TValue>에는 그런 개념이 없습니다. 키에서 값으로 매핑하는 세트로 간주해야합니다.

분명히 매핑 세트의 항목을 반복 할 때 어떤 순서로 나올 것입니다.하지만 항목이 추가 된 순서와 어떤 관련이 있는지 보장 할 수는 없습니다. SortedDictionary<,> 또는 SortedList<,> (둘 다 실제로 사전입니다)을 사용하는 경우 정렬 된 키 순서로 항목을 가져올 수 있지만 그 것이 충분히 유용 할 지 여부는 분명하지 않습니다.

textvalues을 텍스트의 배열이라고하지만 IEnumerable<string>으로 선언하면 문자열 매개 변수가있는 인덱서를 사용하는 것처럼 보입니다. ...

편집 : 이제 질문이 수정되었습니다. 대신 Dictionary<string, int>이 표시됩니다. 전체적으로 더 의미가 있습니다. 이제는 쉽습니다 :

order.Number = textValues.ElementAt(headers["Number"]); 
+0

OP의 마지막 문장은'items.FirstIndexOf ("Book")'. 그런 것이 있다면. 'items'가'textvalues'와 같은 순서로 같은 항목을 갖는 경우에만 의미가 있습니다. –

+0

@ Phil : 정확히,'items'가'Dictionary'이므로, 순서는 의지해서는 안됩니다. 그러나, 편집 한 후에 당신이 할 수있는 일이 더 분명합니다 ... –

+0

존, 나는 "ElementAt"를 지정해야한다고 생각하지 않습니다. 그냥 textValues ​​[headers [ "Number"]]가 작동합니다 :-) – DeveloperCSharp

관련 문제