c# - 按价格排序列表 C#

标签 c# arrays regex list sorting

我正在尝试根据列表中每件商品的价格对列表进行排序。

这是我希望的输出:

            ROLLS_ROYCE1 -- 6.608 €
            ROLLS_ROYCE3 -- 4.956 €
            ROLLS_ROYCE2 -- 0.826 €

但是,以下是当前输出的实际内容:

            ROLLS_ROYCE1 -- 6.608 €
            ROLLS_ROYCE2 -- 0.82 €
            ROLLS_ROYCE3 -- 4.956 €

这是我的代码:

public void MyFunction() 
{
   List<string> mylist = new List<string>(new string[]
   {
      "ROLLS_ROYCE1 -- 0,826 € -- 8 PCS -- 14:02:53.876",
      "ROLLS_ROYCE2 -- 0,826 € -- 1 PCS -- 17:02:53.888",
      "ROLLS_ROYCE3 -- 0,826 € -- 6 PCS -- 18:09:55.888"
   });

   foreach (string f in mylist)
   {
      decimal b = Convert.ToDecimal(GetPrice(f), CultureInfo.GetCultureInfo("de-DE")) * Convert.ToDecimal(GetPieces(f));
      tradesforbigbuyslist += GetName(f) + " -- " + b.ToString() + " €" + 
         Environment.NewLine;
   }

   string[] splittedt2 = tradesforbigbuyslist.Split(new string[] { 
   System.Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
            
   listBox3.DataSource = splittedt2;
}

public string GetPrice (string sourceline)
{
   string newstring = sourceline;
   string test1 = newstring.Replace(FetchThemAll.SubstringExtensions.Before(newstring, "--"), "");
   string textIWant = test1.Replace("--", "");
   string finalPrice = FetchThemAll.SubstringExtensions.Before(textIWant, "€");


   return finalPrice;
}

public string GetPieces(string sourceline)
{
   string ertzu = sourceline;
   string ertzu1 = FetchThemAll.SubstringExtensions.Between(ertzu, "€", "PCS");
   string ertzu2 = ertzu1.Replace("--", "");

   return ertzu2;
}

public string GetName(string sourceline)
{
   string barno = FetchThemAll.SubstringExtensions.Before(sourceline, "--");

   return barno;
}

如何正确排序这些字符串?

最佳答案

您可以通过将每一行输入表示为具有相关属性的类来简化大量工作。如果准确性非常重要,就像处理真实货币一样,那么固定精度数据类型应该代表价格。不过,为了简单起见,我在下面使用了 double。

public class Car {
    public string Name;
    public short Pieces;
    public double Price;
}

然后您将在开始时解析它们并获得这些汽车项目的列表。假设上面的价格代表您希望通过以下 linq 查询获得的列表进行排序的所需值。

var cars = new List<Cars>(); //Assumed definition
var frenchCulture = CultureInfo.CreateSpecificCulture("fr-FR"); //For Euros symbol usage later
//Parse Logic in Between
var sortedCars = cars.OrderByDescending(c => c.Price); //Linq Query yielding IEnumerable. If you must have a list simply append toList()

那么你的输出可能会像这样设置。

foreach (var car in sortedCars)
    // output with string.format("{0} -- {1}", car.Name, car.Price.ToString("C3", frenchCulture))

警告此代码未经测试,但应该大致正确。我确实对字符串格式做了一些研究。

关于c# - 按价格排序列表 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64595433/

相关文章:

Javascript 嵌套 .map() 返回多个数组

sql-server - TSQL从HTML中删除具有特定src的img标签

c# - 处理 Excel Application.ScreenUpdating 中的异常 (0x800AC472)

c# - 使用 Cortana 的 QNA 聊天机器人 "say the feedback"

c# - 只有一个锁定对象的“死锁”?

javascript - 基于另一个数组对数组进行排序/过滤

c# - 如何从 IP 地址字符串中删除端口号

java - 字符串 B 字赋值

负数的Java正则表达式?

C# - 如何计算 .RTF/.TXT 文件中的单词和字母?