有没有办法获得字典项的订单号?

时间:2010-07-22 10:00:29

标签: c#

Dictionary<string,string> items = new Dictionary<string,string>();

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

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

在这种情况下,textvalues数组将接受一个整数值来返回字符串值。如何获取项目编号,说“items”有5个项目名称,“book”在第一个位置然后我必须得到0.So textvalues [items [“book”]]将被翻译为textvalues [item [0]]

好的我正在尝试使用OpenXML 2.0来阅读Excel。这里的要点是我无法指定字段名称并获取值。 所以我试图迭代工作表的第一行,将值添加到字典Dictionary fieldItems,这样当我说fieldItems [“Status”]它会根据列号检索我的单元格值,在我的例子中是列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"]];

1 个答案:

答案 0 :(得分:0)

(Darn,我毕竟没有误读它,并且在前五分钟内没有编辑记录。)

你的问题有点令人困惑地提出......但似乎就像你基本上试图找到字典中项目的“位置”一样。 Dictionary<TKey, TValue>中没有这样的概念。您应该将其视为从键到值的映射的 set

显然,当你迭代那组映射中的条目时,它们会以某种顺序出现 - 但不能保证它与条目的添加顺序有任何关系。如果您使用SortedDictionary<,>SortedList<,>(两者都是字典),您可以按排序键顺序获取条目...但不清楚这对您是否足够好。< / p>

还不清楚你真正想要实现的目标 - 你在文本中调用textvalues一个数组,但是将其声明为IEnumerable<string> - 看起来你正在尝试使用带有字符串参数的索引器......

编辑:好的,现在问题已被编辑,你有一个Dictionary<string, int>而不是Dictionary<string, string> ...所以整个事情更有意义。现在很简单:

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