从列表框项中获取单个字符串
本文关键字:获取 单个 字符串 列表 | 更新日期: 2023-09-27 17:54:25
我有一个列表框,里面有X个项目。Item就像String, double, double。我希望第二个双精度值为smalles的项与它的字符串一起显示在Label中。
示例项目名称Value1 Value2每个部分都被空间分割。这段代码只适用于获取第二个double类型的最小值,但不取该项的字符串。
vName函数不工作
private void bVergleich_Click(object sender, RoutedEventArgs e)
{
if (listBox.Items.Count <= 0)
{
MessageBox.Show("Bitte erst Einträge hinzufügen.");
}
else
{
int anzahl = listBox.Items.Count;
string str = listBox.Items[anzahl].ToString();
string vName = str.Substring(0, str.IndexOf(" ") + 1);
var numbers = listBox.Items.Cast<string>().Select(obj => decimal.Parse(obj.Split(' ').First(), NumberStyles.Currency, CultureInfo.CurrentCulture));
decimal minValue = listBox.Items.Cast<string>().Select(obj => decimal.Parse(obj.Split(' ').Last(), NumberStyles.Currency, CultureInfo.CurrentCulture)).Min();
lVergleich.Content = vName + " " + minValue + "€";
}
}
你知道我怎么才能得到字符串吗?
我将尝试使用您的代码示例。您可以使用老派的方法,在所有条目中运行for循环。
private void bVergleich_Click(object sender, RoutedEventArgs e)
{
if (listBox.Items.Count <= 0)
{
MessageBox.Show("Bitte erst Einträge hinzufügen.");
}
else
{
List<decimal> tmpListe = new List<decimal>();
int anzahl = listBox.Items.Count;
for (int i = 0; i < anzahl; i++)
{
string str = listBox.Items[i].ToString();
// collect all the second double values
tmpListe.Add(decimal.Parse(str.Split(' ').Last(), NumberStyles.Currency, CultureInfo.CurrentCulture));
}
// get the minimal value and its index
decimal minValue = tmpListe.Min();
int index = tmpListe.IndexOf(tmpListe.Min());
// use the index to get the name
string str2 = listBox.Items[index].ToString();
string vName = str2.Substring(0, str2.IndexOf(" ") + 1);
// write down your comparison
lVergleich.Content = vName + " " + minValue + "€";
}
}
这将显示列表中第一个最低值。
我个人也建议使用一个自定义类与3个属性和一个覆盖的ToString
方法显示。然后收集通用List
中的所有项目,并将此列表绑定到ListBox
。
您可以按所需值对集合进行排序,并取序列中的第一个元素
List<string> list = listBox.Items.ToList();
list.Sort((x1, x2) => decimal.Compare(decimal.Parse(x1.Split(' ')[1]), decimal.Parse(x2.Split(' ')[1])));
string x = list.First();
还是
string result = listBox.Items.OrderBy(y => decimal.Parse(y.Split(' ')[1])).First();