将C#列的值一起比较

时间:2014-08-13 14:10:26

标签: c# list

我有一个名为AxiomSubset的C#列表,其中有6列,其中有几行数据,我想检查列表中特定列的所有值是否相等,如果它们相等则应该返回true并转到下一列并检查它们的相等性等等。

例如,我在列表中有以下数据行

CC   Mon    str     stg  rate   units 

HP  15-Mar              4.0800  4
HP  15-Feb              4.0800  4
HP  15-Jan              4.0800  4
LN  15-Mar  3.25    Put 0.0500  50
LN  15-Feb  3.25    Put 0.0500  50
LN  15-Jan  3.25    Put 0.0500  50
LN  15-Mar  3.50    Put 0.1000  50
LN  15-Feb  3.50    Put 0.1000  50
LN  15-Jan  3.50    Put 0.1000  50

在检查列CC的相等性时的上述数据中,它应该返回false,因为它们都不相等

我尝试按照以下方式进行操作,将一行与较早的行进行比较,但显然没有给出预期的结果

for (int i = 0; i < AxiomSubSet.Count; i++)
{
    if (AxiomSubSet[i].CC.ToString() == AxiomSubSet[i + 1].CC.ToString())
    {
        result = true;
        if (AxiomSubSet[i].term.ToString() == AxiomSubSet[i + 1].ToString())
        {
            //So On
        }
    }
}

上面的代码一次比较两个值,如果它们相等则返回true而不考虑其他不需要的值。

有更好的方法吗?

4 个答案:

答案 0 :(得分:5)

您可以为每列执行类似的操作。

if((AxiomSubSet.Select(x => x.CC).Distinct().ToList()).Count > 1)

答案 1 :(得分:1)

我会考虑使用linq。取第一个值来查找列表中的所有匹配值,如果列表中的计数匹配,则所有值都相同。

var listMatch = AxiomSubSet.Where(x => x.CC == AxiomSubSet[0].CC).Select(x => x);
result = listMatch.Count == AxiomSubSet.Count;

或更简洁

if (AxiomSubSet.Where(x => x.CC == AxiomSubSet[0].CC).Select(x => x).Count == AxiomSubSet.Count)

答案 2 :(得分:1)

您可以根据需要更改您的IComparer,但我在这里作为一个简单的例子给您:

public class AxiomSubset : IComparer<AxiomSubset>
{
    public int Compare(AxiomSubset x, AxiomSubset y)
    {
        if (x.CC.CompareTo(y.CC) != 0)
        {
            return x.CC.CompareTo(y.CC);
        }
        else if (x.term.CompareTo(y.term) != 0)
        {
            return x.term.CompareTo(y.term);
        }
        else
        {
            return 0;
        }
    }
}

答案 3 :(得分:1)

from a in AxiomSubSet
group a by a.CC into g
select g.Count

您可以按列进行分组,如果计数大于1,您就知道有不同的值。您可以将其转换为lambda,我更喜欢该语法以提高可读性。