【问题标题】:How to find specific object from list in C#?如何从 C# 中的列表中查找特定对象?
【发布时间】:2023-04-10 22:18:01
【问题描述】:

如何从列表中找到特定对象? 假设我有一个函数,它接受一个对象和一个包含这种类型对象的列表,并返回找到特定对象的位置的数字。

我能想到解决方案的唯一方法是使用 foreach 循环运行列表,但没有更好的方法吗?

谢谢

【问题讨论】:

  • 请注意,无论您使用的库中的任何聪明功能,它基本上都需要在内部实现为 foreach 循环 - 因为列表的存储方式(即没有索引)。如果您有其他结构,例如您知道数据已排序,则可以利用该信息实现更有效的算法

标签: c# list search foreach


【解决方案1】:

您可以使用IndexOf(T item) 方法:

myList.IndexOf(myItem);

它返回项目第一次出现的索引。

【讨论】:

    【解决方案2】:

    要查看对象是否存在您可能只需要List<T>.Contains method

    它说,

    确定一个元素是否在列表中。

    您需要像 List<T>.Contains(T type item) 一样使用它,其中 T 是您需要比较的 Listitem 的同一类型。在您的情况下,它是 Object

    的类型

    要返回索引,您可以使用List<T>.IndexOf Method

    搜索指定对象并返回整个列表中第一次出现的从零开始的索引。

    简单的控制台程序

    class Program
        {
            static void Main(string[] args)
            {
                MyType a = new MyType() { id = 10 };
                MyType b = new MyType() { id = 20 };
                MyType c = new MyType() { id = 30 };
    
                List<MyType> testList = new List<MyType>();
    
                testList.Add(a);
                testList.Add(b);
    
                Console.WriteLine(testList.Contains(a)); // <= Will return true
                Console.WriteLine(testList.Contains(c)); // <= Will return false
    
                Console.WriteLine(testList.IndexOf(a)); // <= will return 0 : the index of object a
    
                Console.ReadKey();    
            }   
        }
    
        // A simple class
        class MyType
        {
            private int ID;
    
            public int id
            {
                get { return ID; }
                set { ID = value; }
            }
         }
    

    【讨论】:

      【解决方案3】:

      您可以使用方法IndexOf,或者如果您使用特殊条件,那么您可以使用方法

      public int FindIndex(Predicate<T> match);
      

      其中匹配是委托

      public delegate bool Predicate<T>(T obj);
      

      其实它类似于标准C++算法std::find_if

      【讨论】:

        【解决方案4】:

        你可以使用 linq 表达式

        List.where(condition)
        

        或者

        List.Select(condition).FirstOrDefault
        

        根据搜索条件,它会返回您想要的项目。

        【讨论】:

          【解决方案5】:

          我能想到解决方案的唯一方法是使用foreach 循环运行列表

          通常,您需要一个循环(forforeach)来在列表中查找对象。您可以直接使用它,也可以通过迭代列表元素的函数来使用它,但会有一个循环。没有办法绕过它:除非您对数组元素的排列方式有所了解,否则您必须全部查看。

          了解有关元素排列的特殊情况的一种情况是知道数组已排序。如果是这种情况,并且当您知道对元素进行排序的属性的值时,使用二分搜索可以更快地找到该元素。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-11-11
            • 1970-01-01
            • 1970-01-01
            • 2022-08-15
            • 2021-08-07
            • 2016-04-03
            • 2018-08-05
            相关资源
            最近更新 更多