如何使用该结构的元素在数组中找到结构?

时间:2018-02-25 05:33:16

标签: c# arrays struct

例如,假设我有一个代表一个人的结构,并包含他们的姓名和年龄。我有一群人,现在我想在那个阵列中找到与“John Doe”名称相匹配的人。做一些初步研究使我Array.Find,但文档的方式令人困惑。如果有人可以帮助我,我们将不胜感激。

3 个答案:

答案 0 :(得分:3)

您可以更轻松地使用LINQ。首先添加using System.Linq,然后编写以下内容:

var john = people.FirstOrDefault( p => p.Name == "John Doe" );

使用Array.Find即可:

var john = Array.Find( people, p => p.Name == "John Doe" );

我通常更喜欢LINQ方法,因为它更直接和可读,因为您可以直接在数组本身上调用FirstOrDefault方法。此外,如果要确保只有一个匹配或抛出异常的实例,或者在找不到任何内容时使用SingleOrDefaultFirst,则可以使用Single。如果找不到匹配项,这些方法的...Default版本将返回default(T)

答案 1 :(得分:1)

从IEnumerable上的linq扩展方法中尝试.Single(foo => foo.bar == "What you want.")

请参阅: https://msdn.microsoft.com/en-us/library/bb155325(v=vs.110).aspx

答案 2 :(得分:0)

以下是an implementation of Array.Find

using System;

public class Program
{
    public static void Main()
    {
        var people = new [] {
            new Person("Caleb"),
            new Person("Martin"),
            new Person("Shaun"),
            new Person("Nechemia")
        };

        var result = Array.Find(people, person => person.Name == "Caleb");
        Console.WriteLine(result.Name);
    }
}

public struct Person
{
    public readonly string Name;

    public Person(string name)
    {
        Name = name;
    }
}

Array.Find有两个参数:要搜索的数组和要在每个元素上运行的谓词。

predicate是接受参数(person)的任何函数或方法,根据条件(person.Name == "Caleb")对其进行检查,并返回true或false。

在这种情况下,Array.Find接受一组人,根据谓词定义的条件一次检查一个人,并返回满足该条件的第一个人。