【问题标题】:How can I find a struct in array using an element of that struct?如何使用该结构的元素在数组中找到一个结构?
【发布时间】:2018-08-04 20:21:20
【问题描述】:

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

【问题讨论】:

    标签: c# arrays struct


    【解决方案1】:

    您可以更轻松地使用 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,或者在找不到任何内容时使用FirstSingle 抛出。这些方法的...Default 版本在找不到匹配项时返回default(T)

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        这里是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 获取人员数组,根据谓词定义的条件一次检查一个人,然后返回满足该条件的第一个人。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-06-01
          • 2014-10-13
          • 1970-01-01
          • 2020-09-06
          • 1970-01-01
          • 2023-03-05
          • 1970-01-01
          • 2021-09-20
          相关资源
          最近更新 更多