获取列表中最低项的最佳方法

Best way to get the lowest item in a list

情况:我有 3 个 类 相互配合。 1:主要(GUI) 2:比较(比较值) 3:CompareData(继承列表值)

我想获取两个值:一个字符串和一个双精度值,并将它们放入列表中。当然最后会有不止一个列表项。列表填满后,我想用它的字符串得到最低的 double 并将它们放在标签中。

这是我目前得到的:

主要:

public class GlobaleDaten //The second List: VglDaten is the one for my situation
{
    public static List<Daten> AlleDaten = new List<Daten>();
    public static List<Vgl> VglDaten = new List<Vgl>();
}

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

  [...Some Code thats not relevant...]


//addListAb adds values in a ListBox and should also 
//place them into the list VglDaten

    public void addListAb()
    {
        listBox.Items.Add(Abzahlungsdarlehenrechner.zgName + " " + "[Abzahlungsdarlehen]" + " " +Abzahlungsdarlehenrechner.zmErg.ToString("0.00") + "€" + " " + Abzahlungsdarlehenrechner.zgErg.ToString("0.00") + "€");

        Vgl comp = new Vgl();
        comp.name = Abzahlungsdarlehenrechner.zgName;
        comp.gErg = Abzahlungsdarlehenrechner.zgErg;

        GlobaleDaten.VglDaten.Add(comp);
    }

//bVergleich should compare these values from the list 
//and show the lowest value in a label
    public void bVergleich_Click( object sender, RoutedEventArgs e)
    {
        if (listBox.Items.Count <= 0)
        {
            MessageBox.Show("Bitte erst Einträge hinzufügen.");
        }
        else
        {
            VglRechner vglr = new VglRechner();
            vglr.Compare();

            lVergleich.Content = VglRechner.aErg + " " + "€";
        }
    }

比较数据:

//Only used for storing the values
public class Vgl : Window
{
    public string name { get; set; }
    public double gErg { get; set; }
}

比较:

public class VglRechner
{

    public static string aName;
    public static double aErg;

    public void Compare(Vgl comp)
    {

   //I'm not sure if this is the right way to compare the values
   //correct me if I'm wrong please :)
        double low = GlobaleDaten.VglDaten.Min(c => comp.gErg);

        aErg = low;
        aName = comp.name;
    }
}

使用 Enumerable.Min 是获得最低值的正确方法,但您不会以这种方式获得属于该值的 string,因此 Vgl 实例。

您可以使用这种方法:

Vgl lowestItem = GlobaleDaten.VglDaten.OrderBy(c => c.gErg).First();
aErg   = lowestItem.gErg;
aName  = lowestItem.name;