【发布时间】:2018-08-04 20:21:20
【问题描述】:
例如,假设我有一个代表一个人并包含他们的姓名和年龄的结构。我有一组人,现在我想在该数组中找到与名称“John Doe”匹配的人。进行一些初步研究后,我找到了Array.Find,但文档的表述方式令人困惑。如果有人可以帮助我,将不胜感激。
【问题讨论】:
例如,假设我有一个代表一个人并包含他们的姓名和年龄的结构。我有一组人,现在我想在该数组中找到与名称“John Doe”匹配的人。进行一些初步研究后,我找到了Array.Find,但文档的表述方式令人困惑。如果有人可以帮助我,将不胜感激。
【问题讨论】:
您可以更轻松地使用 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)。
【讨论】:
从 IEnumerable 的 linq 扩展方法中尝试 .Single(foo => foo.bar == "What you want.")。
见: https://msdn.microsoft.com/en-us/library/bb155325(v=vs.110).aspx
【讨论】:
这里是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") 检查并返回真或假的任何函数或方法。
在这种情况下,Array.Find 获取人员数组,根据谓词定义的条件一次检查一个人,然后返回满足该条件的第一个人。
【讨论】: