首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获取字典元素的相对位置?

如何获取字典元素的相对位置?
EN

Stack Overflow用户
提问于 2010-09-22 23:16:40
回答 5查看 12K关注 0票数 3

我有下一个C#代码:

代码语言:javascript
复制
    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。

添加:除非您有更好的想法,否则我想用由找到的字典元素的相对位置指示的行号中的某些值来填充矩阵。这同样适用于该列,但使用了不同的字典。举个例子:

代码语言:javascript
复制
     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是第二个字典的关键字。

我怎么才能得到这个呢?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-09-22 23:20:40

Dictionary<,>中没有“位置”这样的东西--它是一个无序集合。

按key - SortedList<,>SortedDictionary<,>排序的也有类似的集合。请注意,它们是按键而不是按插入时间排序的。还不清楚你想要哪一个。

票数 10
EN

Stack Overflow用户

发布于 2013-07-11 01:53:11

这应该能起到作用:

代码语言:javascript
复制
d.Keys.ToList().IndexOf("c");

请注意,在转换为列表时,字典提供的O(1)时间查找会丢失,因为列表本质上是O(n)。因此,如果您的Dictionary包含大量元素,最好使用另一个Dictionary或Matrix维度来存储位置,因为以这种方式检索它们可能会更慢。实际上,您可能应该假设上面的一行代码类似于:

代码语言:javascript
复制
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;
}

顺便说一句,,如果你想得到这个位置,你可能会假设这个位置是不变的。微软说不要指望它,但在实践中你会发现你可能可以指望它。(我从未见过位置不被保留的情况。)这就是说,直到微软承认,“是的,是的,我们一直对你有所保留:位置实际上是保留在字典中的。我们只是不想承认这一点,因为如果我们找到了更好的实现,我们希望能够改变它,但现在我们知道我们将离开它,所以就这样吧……”,你可能不应该假设这个位置是保留的。

最后,如果您打算碰碰运气并假定它被保留,并且您还计划使用上面的方法来获取位置,那么请考虑将键存储在列表中,因为查找时间将是相同的,并且列表顺序将被保证被保留。

票数 2
EN

Stack Overflow用户

发布于 2010-09-22 23:20:49

字典没有键-值对的隐含顺序。如果你需要这个“位置”,你就用错了方法。

在你的编辑上:如果你正在实现一个矩阵,你最好的选择是使用一个多维数组。例如:

代码语言:javascript
复制
int[,] matrix = new int[3, 2] { {1, 2}, {3, 4}, {5, 6} };

等同于如下的矩阵:

代码语言:javascript
复制
1 2
3 4
5 6

你可以使用matrix[i][j]来访问它的元素;例如,matrix[0][0]是1,matrix[0][1]是2,等等。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3770757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档