![](/img/trans.png)
[英]How to effectively replicate ArrayList.BinarySearch in List<T>.BinarySearch?
[英]using c# arraylist.binarysearch with custom objects
请注意,我知道ArrayList很旧...等,但是我需要知道并理解它的工作原理,所以请多多包涵(顺便说一句,不确定我是否拼写了熊蛙,我忘了怎么拼写... xD )
我明天要写一个测试(我正在大学里),但是这个问题我已经走到尽头了,我喜欢解决问题,但是我找不到任何解决方案...
说我有:
class Person
{
private string name, surname;
private int age, year born;
//with more variables, etc...
我还有另一堂课
Class People
{
ArrayList arlPeople = new ArrayList();
}
我知道代码与任何工作指令无关,但这只是为了使我的问题更清楚
好吧,我想知道,用户输入了一个名字
Console.Writeline("display all dat of the person by entering their name >>")
然后用户输入名称,但是...
由于arraylist提供了.sort()
和.binarysearch()
,因此我想查找使用二进制搜索方法输入姓名的人员的位置
二进制搜索需要一个参数(Object value)
,但是如何将用户输入的名称作为对象参数传递呢?
请帮忙!!!
您的Person
对象可以实现IComparable
。 也就是说,您需要添加一个比较名称的compareTo
方法:
class Person : IComparable
{
private string name, surname;
private int age, year born;
public int CompareTo(object obj) {
return name.compareTo((obj as Person).name);
}
...
}
我不推荐这样做,但是我遵循了避免泛型的示例。 如果这样做,您可能还应该重写Equals
和GetHashCode
。
Tim S.有一个很好的答案,而是使用IComparer
。 考虑一下,这可能更有意义,这取决于您认为Person
是本质上可比较的还是可以比较的。
这有效:
class NameComparer : IComparer
{
public int Compare(Object x, Object y)
{
var xs = (Swimmer)x;
var ys = (Swimmer)y;
return xs.Name.CompareTo(ys.Name);
}
}
class Swimmer
{
public string Name { get; set; }
}
class Swimmers
{
ArrayList AllSwimmers;
IComparer nameComparer = new NameComparer();
public Swimmers()
{
AllSwimmers = new ArrayList();
AllSwimmers.Add(new Swimmer { Name = "Tom" });
AllSwimmers.Add(new Swimmer { Name = "Joe" });
AllSwimmers.Add(new Swimmer { Name = "George" });
AllSwimmers.Sort(nameComparer);
}
//some other methods in between
public int GetOnName()
{
Console.WriteLine("Enter the name of the swimmer");
string name = Console.ReadLine();
int pos = AllSwimmers.BinarySearch(new Swimmer { Name = name }, nameComparer);
Console.WriteLine(pos);
return pos;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.