如何解决在由该方法制成的数组中找到最大的数字
有一个针对旅客的班级,其中包含string name
,int age
,string job
等。我对此类进行了排列,可以说它有10个席位。
我想找到年纪最大的乘客。
我的代码无效,因为无法将passenger[i]
与整数进行比较。我的意思是我只需要age
passenger[]
如何在passenger[]
中找到最老的一个?
编辑:返回值应为passenger
和name
的{{1}},而不仅仅是其major
。
age
解决方法
首先,正如@Cid在评论问题时提到的,Passenger
的所有字段均为private
(默认情况下,未指定修饰符时)。您应该将其标记为public
(以便在声明类的外部访问它们),或者更好地创建公共属性:
class Passenger
{
public int Age { get; set; } // public auto property
public string Name { get; set; } // public auto property
public string Major { get; set; } // public auto property
public Passenger(int age,string name,string major)
{
Age = age;
Name = name;
Major = major;
}
}
第二,您需要比较乘客的Age
(适当,不是整个对象):
if (passengers[i].Age > oldest)
{
oldest = passengers[i].Age;
}
此外,您可以使用LINQ
查找年龄最大的乘客:
var oldest = passengers.Max(item => item.Age);
最后,要返回最老的乘客:
public Passenger Oldest()
{
// if no passengers -> return null
if (!passengers?.Any() ?? true)
{
return null;
}
var maxAge = passengers.Max(item => item.Age);
return passengers.First(item => item.Age == maxAge);
}
此外,正如@DmitryBychenko所提到的,该方法可以简化为:
public Passenger Oldest()
{
// if no passengers -> return null
if (!passengers?.Any() ?? true)
{
return null;
}
return passengers.Aggregate((s,a) => s.Age > a.Age ? s : a);
}
或不包含LINQ
:
public Passenger Oldest()
{
// if no passengers -> return null
if (passengers == null || passengers.Length == 0)
{
return null;
}
var maxAge = passengers[0].Age;
var oldestPassengerIndex = 0;
for (var i = 1; i < passengers.Length; i++)
{
if (passengers[i].Age > maxAge)
{
oldest = passengers[i].Age;
oldestPassengerIndex = i;
}
}
return passengers[oldestPassengerIndex];
}
,
使用Linq很容易
var oldest=passengers.Max(x=>x.Age):
否则
Passenger oldest=new Passenger(0,"","");
foreach (Passenger p in Passengers){
if (p.age>oldest.age) oldest=p;
}
,
罗马回答的效率略高,特别是如果最老的乘客出现在列表的最后:
public Passenger Oldest()
{
if (passengers.Length == 1) return passengers[0];
var oldest = passengers[0];
for (int i = 1; i < passengers.Length; i++)
{
if (passengers[i].Age > oldest.Age) oldest = passengers[i];
}
return oldest;
}
这仅需要一次迭代。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。