我有下一个C#代码:
Dictionary<string, int> d = new Dictionary<string, int>();
d.Add("a", 3);
d.Add("b", 1);
d.Add("c", 0);
d.Add("d", -1);
d.Add("e", -9);当搜索关键字"c“时,我想得到这个关键字的位置,即2。如果我查找关键字"e",我想得到4。如果找不到元素,则相对位置可能是-1。
添加:除非您有更好的想法,否则我想用由找到的字典元素的相对位置指示的行号中的某些值来填充矩阵。这同样适用于该列,但使用了不同的字典。举个例子:
n4 n2 n1 n3 n9 . . .
a 4/4
b 2 8
c
d 8/2
e 4/3
.
.
.其中a,b,c,d,e,...是字典"d“的关键字,而n4、n2、n3、n9是第二个字典的关键字。
我怎么才能得到这个呢?
发布于 2010-09-22 23:20:40
在Dictionary<,>中没有“位置”这样的东西--它是一个无序集合。
按key - SortedList<,>和SortedDictionary<,>排序的也有类似的集合。请注意,它们是按键而不是按插入时间排序的。还不清楚你想要哪一个。
发布于 2013-07-11 01:53:11
这应该能起到作用:
d.Keys.ToList().IndexOf("c");请注意,在转换为列表时,字典提供的O(1)时间查找会丢失,因为列表本质上是O(n)。因此,如果您的Dictionary包含大量元素,最好使用另一个Dictionary或Matrix维度来存储位置,因为以这种方式检索它们可能会更慢。实际上,您可能应该假设上面的一行代码类似于:
GetDictKeyPos(d, "c");
public int GetDictKeyPos(Dictionary<string, int> d, string key)
{
for (int i = 0; i < d.Count; ++i)
{
if (d.ElementAt(i).Key == key)
return i;
}
return -1;
}顺便说一句,,如果你想得到这个位置,你可能会假设这个位置是不变的。微软说不要指望它,但在实践中你会发现你可能可以指望它。(我从未见过位置不被保留的情况。)这就是说,直到微软承认,“是的,是的,我们一直对你有所保留:位置实际上是保留在字典中的。我们只是不想承认这一点,因为如果我们找到了更好的实现,我们希望能够改变它,但现在我们知道我们将离开它,所以就这样吧……”,你可能不应该假设这个位置是保留的。
最后,如果您打算碰碰运气并假定它被保留,并且您还计划使用上面的方法来获取位置,那么请考虑将键存储在列表中,因为查找时间将是相同的,并且列表顺序将被保证被保留。
发布于 2010-09-22 23:20:49
字典没有键-值对的隐含顺序。如果你需要这个“位置”,你就用错了方法。
在你的编辑上:如果你正在实现一个矩阵,你最好的选择是使用一个多维数组。例如:
int[,] matrix = new int[3, 2] { {1, 2}, {3, 4}, {5, 6} };等同于如下的矩阵:
1 2
3 4
5 6你可以使用matrix[i][j]来访问它的元素;例如,matrix[0][0]是1,matrix[0][1]是2,等等。
https://stackoverflow.com/questions/3770757
复制相似问题