我如何在 C# 中使用二进制搜索来获取通用列表

how can i use binary search in c# for generic list

我想对我的列表进行排序,然后使用二进制搜索在列表中找到一个名称并显示它。

public abstract class animal {
  protected int age
  protected string name
  public print() {
    console.writeline({
      age
    } + {
     name
    });
  }
  animal() {}~animal() {}
}

public class pets {
  private List<animal> list = new List<animal>();

  public void search(string m) {
    int index = list.BinarySearch(m);
    if (index == 0)
      list[index].print();
  }
}

内置的BinarySearch方法不允许您传入列表类型以外的类型的值。要使用内置 BinarySearch,您需要定义一个 class 实现 IComparer<Animal> 比较 Name,或者使 Animal 实现 IComparable<Animal> 以便默认情况下按名称比较两种动物。然后您 Sort() 列表并调用 BinarySearch,传递具有您要搜索的名称的 Animal 实例。

您必须实现自己的 BinarySearch 方法来搜索具有给定 属性 值的对象(当然,假设列表按相同的 属性).

如果您只想使用常规线性搜索方法搜索具有给定名称的动物,您可以使用直接 foreach 循环,breaking 当具有该名称的项目是找到,或使用 First() Linq 方法(基本上做同样的事情)。