[英]find the highest number in an array made by the method
有一個 class 供乘客使用,其中包含string name
、 int age
、 string job
等。我制作了這個 class 的數組,假設它有 10 個位置。 我想找到最年長的乘客。
我的代碼不起作用,因為無法將passenger[i]
與 integer 進行比較。 我的意思是我只需要passenger[]
的age
[]
如何在passenger[]
中找到最舊的?
編輯:返回值應該是他的name
和major
的passenger
,而不僅僅是它的age
。
public Passenger Oldest()
{
int oldest = 0;
for (int i = 0; i < passengers.Length; i++)
{
if (passengers[i] > oldest)
{
oldest = passengers[i];
}
}
return oldest;
}
class Passenger
{
int age;
string name;
string major;
public Passenger(int _age, string _name, string _major)
{
age = _age;
name = _name;
major = _major;
}
}
首先,正如@Cid 在評論中提到的,質疑Passenger
的所有字段都是private
的(默認情況下,當未指定修飾符時)。 您應該將 then 標記為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;
}
這只需要一次迭代。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.