如何从结构中找到最大值?

时间:2018-09-13 15:40:02

标签: c#

public struct nariai
{
    public string vardas;
    public string pavarde;
    public double eurai;
    public double centai;
    public double suma;
};
static void Main(string[] args)
{
    double islaidos;
    double surinktiPinigai = 0;
    StreamReader failas = new StreamReader("nariai.txt");
    string a = failas.ReadLine();
    int nariuKiekis = int.Parse(a);
    nariai[] narys = new nariai[nariuKiekis];
    string[] info = new string[nariuKiekis];
    for (int i = 0; i < nariuKiekis; i++)
    {
        info[i] = failas.ReadLine();
        string[] informacija = info[i].Split(' ');
        narys[i].vardas = informacija[0];
        narys[i].pavarde = informacija[1];
        narys[i].eurai = double.Parse(informacija[2]);
        narys[i].centai = double.Parse(informacija[3]);
        Console.WriteLine("{0} {1} {2} {3}", narys[i].vardas, narys[i].pavarde, narys[i].eurai, narys[i].centai);
    }
    for (int i = 0; i < nariuKiekis; i++)
    {
        islaidos = narys[i].eurai * 100 + narys[i].centai;
        narys[i].suma = islaidos / 100 * 0.25;
        islaidos = narys[i].suma;
        Console.WriteLine(narys[i].suma);
        surinktiPinigai = surinktiPinigai + islaidos;
    }
    Console.WriteLine("Surinkti pinigai bendroms išlaidoms: {0} Eurai.", surinktiPinigai);
}

文件如下:

file

命令如下:

command

我需要找出谁在“ public double suma”结构中具有最大的价值,并且我需要写下它的名字和姓氏。

2 个答案:

答案 0 :(得分:1)

您想要的是从列表中检索最大为suma的项目,然后获取其其他属性。

var item = narys.OrderByDescending(i => i.suma).FirstOrDefault();
var name = $"{item?.vardas} {item?.pavarde}";

请注意,由于验证?.的C#6.0不为null,因此请使用item运算符。如果在执行此查询时您确定集合不是空的,则只需:

var item = narys.OrderByDescending(i => i.suma).First();
var name = $"{item.vardas} {item.pavarde}";

您还可以使用MoreLinq的MaxBy,其中:

  

根据给定的投影返回给定序列的最大元素。

答案 1 :(得分:0)

您可以尝试使用LINQ

var maxNarys = narys.OrderByDescending(n => n.suma)
            .FirstOrDefault();

然后访问其属性,如下所示:

var maxNarvardas = maxNarys.vardas;

编辑

还要仔细查看您的代码:

看来您可以合并两个循环并添加一个变量来查找max:

var maxSuma = double.MinValue;
var maxIndex = -1;
for (int i = 0; i < nariuKiekis; i++)
{
    info[i] = failas.ReadLine();
    string[] informacija = info[i].Split(' ');
    narys[i].vardas = informacija[0];
    narys[i].pavarde = informacija[1];
    narys[i].eurai = double.Parse(informacija[2]);
    narys[i].centai = double.Parse(informacija[3]);
    Console.WriteLine("{0} {1} {2} {3}", narys[i].vardas, narys[i].pavarde, narys[i].eurai, narys[i].centai);

    islaidos = narys[i].eurai * 100 + narys[i].centai;
    narys[i].suma = islaidos / 100 * 0.25;
    islaidos = narys[i].suma;
    if(maxSuma < narys[i].suma)
    {
         maxSuma = narys[i].suma;
         maxIndex = i;
    }
    surinktiPinigai = surinktiPinigai + islaidos;
 }
 if(maxIndex>=0) Console.WriteLine(narys[maxIndex].suma);