【问题标题】:How to sort list items by substring value ? c#如何按子字符串值对列表项进行排序? C#
【发布时间】:2021-01-20 03:32:39
【问题描述】:

我有一个包含一些订单信息的列表

订单信息:

STORAGEA ----- 2,311 € ----- 8 PCS ----- 08:55:02.933
COMPANYX ----- 6,435 € ----- 80 PCS ----- 08:59:07.751
FACTORYT ----- 22,20 € ----- 80 PCS ----- 08:45:04.686

您可以看到我的列表项没有正确排序,因为订购时间是混合的

期望的输出是:

FACTORYT ----- 22,20 € ----- 80 PCS ----- 08:45:04.686
STORAGEA ----- 2,311 € ----- 8 PCS ----- 08:55:02.933
COMPANYX ----- 6,435 € ----- 80 PCS ----- 08:59:07.751

我当前的代码:

using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

   

        private void button1_Click_1(object sender, EventArgs e)
        {
            List<string> mylist = new List<string>(new string[] { "STORAGEA ----- 2,311 € ----- 8 PCS ----- 08:55:02.933",
 "COMPANYX ----- 6,435 € ----- 80 PCS ----- 08:59:07.751", 
"FACTORYT ----- 22,20 € ----- 80 PCS ----- 08:45:04.686" });

            listBox1.DataSource = mylist;
        }
    }
}

感谢你们的帮助:)

【问题讨论】:

  • 您应该做的第一件事是将字符串解析为具有每个子字符串的单独属性的适当类(并使用适当的类型,例如 DateTime 用于时间和 decimal 用于花费)。然后您就可以轻松地使用 Linq 的 OrderBy() 和(如有必要)ThenBy() 来获得您想要的订单。
  • 马修·沃森是对的。即使你可以使用这样的东西:mylist = mylist .OrderBy(x=&gt; Convert.ToDateTime(x.Substring(x.Length-12, 12))) .ToList(); - 这不是对数据进行排序的正确方法。根据 Matthew 的评论创建自定义类。

标签: c# arrays arraylist foreach listitem


【解决方案1】:

请阅读问题的 cmets。

想象一下,您必须使用适当的数据类型处理特定对象。

这是示例类:

class Order
{
    public string CompanyName { get; set; }
    public double Price { get; set; }
    public int CountOfPieces { get; set; }
    public DateTime OrderTime { get; set; }
}

您可以通过这种方式将List&lt;string&gt;“转换”为有序的List&lt;Order&gt;

List<Order> myProperData = mylist
    .Select(x=>x.Split(new string[]{" ", "-", "€"}, StringSplitOptions.RemoveEmptyEntries))
    .Select(x=> new Order()
    {
        CompanyName = x[0],
        Price = Convert.ToDouble(x[1]),
        CountOfPieces = Convert.ToInt32(x[2]),
        OrderTime = Convert.ToDateTime(x[4])
    })
    .OrderBy(x=>x.OrderTime) //sort orders by OrderTime!
    .ToList();

如您所见,myProperData 是订单列表。您可以按照自己的方式管理数据(添加/删除/排序)。

更多详情请见:Classes - C# Programming Guide

【讨论】:

    猜你喜欢
    • 2017-02-23
    • 2021-06-10
    • 2018-05-20
    • 2012-11-26
    • 2014-04-15
    • 2020-06-13
    • 1970-01-01
    • 2018-02-28
    • 2010-11-18
    相关资源
    最近更新 更多