找出两个词典之间的混乱程度

时间:2014-01-19 19:12:38

标签: c# dictionary entropy

我无法解决这个问题。

我有两个带相同键的词典。然而,第二个字典混合在一起,并且键的顺序不同。 我希望能够计算新词典中每个键与第一个词典中原始位置的距离。

例如:密钥1被移动到密钥3(在第二个字典中),因此障碍将是2

1 个答案:

答案 0 :(得分:0)

据我所知,没有内置方法可以执行此操作。但是您可以使用此方法获取两个字典项之间的索引差异(按键)。

public static int GetIndexDifference(IDictionary source, IDictionary target, object key)
{
    int index1=0, index2=0;
    int currentPosition = 1;
    foreach (var element in source.Keys)
    {
        if (element.Equals(key))
        {
            index1 = currentPosition;
            break;
         }
         currentPosition++;
     }
     currentPosition = 1;
     foreach (var element in target.Keys)
     {
         if (element.Equals(key))
         {
            index2 = currentPosition;
            break;
         }
         currentPosition++;
     }

        return Math.Abs(index1 - index2);
}

你可以像这样使用它:

var dict1 = new Dictionary<string, string> {{"sample1", "some item"}, {"sample2", "some item"}};

var dict2 = new Dictionary<string, string> {  { "sample2", "some item" },{ "sample1", "some item" }, };

Console.WriteLine(GetIndexDifference(dict1,dict2,"sample1"));

或者您可以将它与LINQ一起使用:

var disOrders =  dict1.Select(item => GetIndexDifference(dict1, dict2, item.Key)).ToList();

它会将所有disOrders计为List<int>