例如,假设我有一个代表一个人的结构,并包含他们的姓名和年龄。我有一群人,现在我想在那个阵列中找到与“John Doe”名称相匹配的人。做一些初步研究使我Array.Find
,但文档的方式令人困惑。如果有人可以帮助我,我们将不胜感激。
答案 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
方法。此外,如果要确保只有一个匹配或抛出异常的实例,或者在找不到任何内容时使用SingleOrDefault
和First
,则可以使用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
接受一组人,根据谓词定义的条件一次检查一个人,并返回满足该条件的第一个人。