[英]List sorting on nested struct members
使用IComparer的实现来整理列表时,我遇到了一些问题。
public struct VAL
{
public int i;
public string s;
}
public struct INFO
{
public string name;
public VAL val;
public string address;
}
public class ListSorter:IComparer<INFO>
{
public enum SORT_TYPE{BYNAME, BYVAL,BYADDRESS};
public int Compare(INFO i1, INFO i2)
{
switch(sortType)
{
case SORT_TYPE.BYNAME;
return string.Compare(i1.name, i2.name);
case SORT_TYPE.BYADDRESS:
return string.Compare(i1.address, i2.address);
case SORT_TYPE.BYVAL:
{
??????
}
}
}
}
ListSorter类中的比较函数是如何比较给定INFO结构中的字符串的示例。 但是我不知道如何根据VAL结构信息成员对列表进行排序
通常,您会执行以下操作:
case SORT_TYPE.BYVAL:
{
int ret = i1.VAL.i.CompareTo(i2.VAL.i);
if (ret != 0)
{
return ret;
}
return i1.VAL.s.CompareTo(i2.VAL.s);
}
首先比较i
,如果相等,则比较s
(或者相反,必须由您选择顺序)。
不知道VAL
应该代表什么,在这里我们几乎不可能为您的问题提供确定的答案。 天真的实现会选择一个字段优先于另一个字段-正如xanatos在他的回答中所示(他发布的代码实现了我进一步介绍的逻辑)。
IE哪个子比较最重要,是i
还是s
? 在不知道这里的情况下,我们可以涵盖比较中的所有组合(除2个组合之外)-以及另外2个“连续”组合。
以下几乎表格可以帮助您确定两个VAL
: VAL1
和VAL2
:
VAL1.i == VAL2.i
(and) VAL1.s == VAL2.s => 0
(or) VAL1.s < VAL2.s => -1
(or) VAL1.s > VAL2.s => 1
VAL1.i < VAL2.i
(and) VAL1.s == VAL2.s => -1 //(or possibly 0 if i is not important)
(or) VAL1.s < VAL2.s => -1
(or) VAL1.s > VAL2.s => ??? /** WHICH ONE MAKES SENSE TO YOU? **/
VAL1.i > VAL2.i
(and) VAL1.s == VAL2.s => 1 //(or possibly 0 if i is not important)
(or) VAL1.s < VAL2.s => ??? /** WHICH ONE MAKES SENSE TO YOU? **/
(or) VAL1.s > VAL2.s => 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.