我正在开发一个使用基于键的索引的组件,该索引可以对引用对象集合中的项目进行排序(高级字典)。
当键由一个单独的项组成时,比较机制很好地排序,但是到了这个时候,我添加了一个维度的复杂性,我失去了排序的精度。
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 :(得分:0)
比较第一个组件:如果结果不为零则返回它。否则,比较第二个组件,返回结果。
这称为词典顺序。
答案 1 :(得分: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;
}