2017-04-13 60 views
0

我正在開發一個組件,它使用一個基於鍵的索引對引用對象(高級字典)的集合中的項進行排序。Sortable Arrays of Comparable Values

比較的機制很好地排序時,密鑰是由一個單一的項目組成,但是當我添加一個更多的維度的複雜性,我失去了排序的精度。

var key1 = new Key{Values=new[]{23,56}}; 
var key2 = new Key{Values=new[]{23,58}}; 

// i will be -1 because the first component of key1 is equal to 
// the first component of key2 
var i = key1.Compare(key2); 

要獲取密鑰我使用的代數加法的密鑰的單個組分的比較的排序因素。 我感覺到,我沒有做它的權利,因爲該命令是不尊重時,元件的值具有較高程度的差異

var key1 = new Key{Values=new[]{23,92}}; 
var key2 = new Key{Values=new[]{33,45}}; 

// i will be 0 because the first component of key1 is less than 
// the first component of key2, but the second component of 
// key1 is more than the second component of key2, while I'd 
// expect a -1 
// -1 + 1 = 0 
var i = key1.Compare(key2); 

排序是發生錯誤的,因爲關鍵的部件整體考慮的同等重要性,而我想按位置排列比較因子

有沒有人遇到過相同的情況?我錯過了什麼?

注意:考慮到在我的例子中的值進行比較是數值,但在現實中的對象類型是可變的,但所有的IComparable的

+0

你可以給比較方法的源代碼,你的pb的解決方案在那裏。 –

回答

0

比較第一部分:如結果不回零了。否則,比較第二個分量,返回結果。

這就是所謂的詞典順序。

0

你基本上可以遍歷所有的字段,並在你的比較函數中逐個比較,就像這樣;

// Assuming A and B have same length 
bool comparator(const A[], const B[]){ 
    for(i = 0 ; i < A.length; i++) 
    if (A[i] <= B[i]) 
    continue; 
    else 
    return true; 

    return false; 

}