首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >比较C#中数组的值

比较C#中数组的值
EN

Stack Overflow用户
提问于 2011-06-15 16:09:14
回答 8查看 520关注 0票数 1

我有一个布尔数组,如下所示

代码语言:javascript
复制
bool[] responses = new bool[] {true, false, true};

和两个如下所示的类:

代码语言:javascript
复制
public class Person {
  public IList<PersonDetail> PersonDetails
}

public class PersonDetail {
  public bool   Correct { get; set; }
}

PersonDetails
 >> PersonDetail[0].correct = true
 >> PersonDetail[1].correct = true
 >> PersonDetail[2].correct = false

有没有一种简单的方法可以比较它们,看看它们的真/假是否相等?我尝试使用c# .SequenceEqual,但我不知道如何将PersonDetail类中的数据放入序列xxx中,以便与响应进行比较。

这是我到目前为止所知道的:

代码语言:javascript
复制
var equal = responses.Select(bool.Parse).SequenceEqual( xxx );

我需要做的是比较以下内容:

代码语言:javascript
复制
responses[0] == PersonDetail[0].correct and
responses[1] == PersonDetail[1].correct and
responses[2] == PersonDetail[2].correct 

因此,responses[x]中的true应该与PersonDetail[x]中的true匹配,而responses[x]中的false应该与PersonDetail[x]中的false匹配

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-06-15 16:15:31

不是100%确定你的代码,但也许:

var equal = responses.SequenceEqual(Person.PersonDetails.Select(PD => PD.correct);

票数 0
EN

Stack Overflow用户

发布于 2011-06-15 16:14:10

你的代码并不是很清晰,但我想你会想要做以下事情:

代码语言:javascript
复制
var isEqual = responses.SequenceEqual(PersonDetail.Select(p=>p.Correct))
票数 1
EN

Stack Overflow用户

发布于 2011-06-15 16:41:42

如果我没看错你的问题,这个LINQ会按照你的要求去做。我不确定它是否比一个简单的foreach循环更具可读性,但这不是重点!

代码语言:javascript
复制
public class Person 
{
  public IList<PersonDetail> PersonDetails;
}

public class PersonDetail 
{
  public bool   Correct;
}

void Main()
{
    bool[] responses = new bool[] {true, false, true};
    Person p = new Person();
    p.PersonDetails = new List<PersonDetail>();
    p.PersonDetails.Add(new PersonDetail(){Correct = true});
    p.PersonDetails.Add(new PersonDetail(){Correct = true});
    p.PersonDetails.Add(new PersonDetail(){Correct = false});

    //bool allGood = p.PersonDetails.Select((pd, index) => pd.Correct == responses[index]).All(x => x==true);

    bool allGood = responses.SequenceEqual(p.PersonDetails.Select(x => x.Correct));
    allGood.Dump(); // LINQpad extension
}

还为时过早,我忘记了SequenceEquals,它以一种更具可读性的方式做同样的事情。代码已更改,以匹配其他所有人已经回答的内容...

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6354813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档