基本上我有一个字典,其中包含我的词汇表中的所有单词作为键,并且所有单词都以0作为值. 为了将文档处理成一个单词表示,我习惯用适当的IEqualityComparer复制该字典,并简单地检查字典是
为了将文档处理成一个单词表示,我习惯用适当的IEqualityComparer复制该字典,并简单地检查字典是否包含文档中的每个单词并递增它的密钥.
为了获得单词表示的数组,我只使用了ToArray方法.
这似乎工作正常,但我只是被告知字典不保证相同的键顺序,因此结果数组可能代表不同顺序的单词,使其无用.
我目前解决此问题的想法是将单词字典的所有键复制到ArrayList中,创建适当大小的数组,然后使用数组列表的indexOf方法填充数组.
所以我的问题是,有没有更好的方法来解决这个问题,我看起来有点粗糙…而且由于IEqualityComparer,我不会有问题吗?
让我看看我是否理解这个问题.您有两个文档D1和D2,每个文档包含从已知词汇表{W1,W2 … Wn}中提取的单词序列.您希望获得两个映射,指示每个文档中每个单词的出现次数.所以对于D1,你可能会有W1 --> 0 W2 --> 1 W3 --> 4
表明D1可能是“W3 W2 W3 W3 W3”.也许D2是“W2 W1 W2”,所以它的映射是
W1 --> 1 W2 --> 2 W3 --> 0
您希望同时采用两个映射并确定向量[0,1,4]和[1,2,0],然后计算这些向量之间的角度,作为确定两个文档有多相似或不同的方法.
您的问题是字典不保证按任何特定顺序枚举键/值对.
好的,所以订购它们.
vector1 = (from pair in map1 orderby pair.Key select pair.Value).ToArray(); vector2 = (from pair in map2 orderby pair.Key select pair.Value).ToArray();
你完成了
这会解决您的问题,还是我误解了这种情况?