合并多个List<T>类型并通过LINQ按指定属性排序

本文介绍了一种使用C#实现列表合并与时间降序排序的方法,并展示了如何将排序后的列表绑定到Repeater控件中进行展示。

后台CS代码:

namespace WebFormTest.TestCollect
{
    public partial class ListTest : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            List<Person> list1 = new List<Person>();
            list1.Add(new Person() { Age = 1, Name = "张三", Time = Convert.ToDateTime("2013/12/20 13:20") });
            list1.Add(new Person() { Age = 5, Name = "李四", Time = Convert.ToDateTime("2013/12/20 14:20") });
            list1.Add(new Person() { Age = 3, Name = "王五", Time = Convert.ToDateTime("2013/12/20 13:40") });

            List<Person> list2 = new List<Person>();
            list2.Add(new Person() { Age = 1, Name = "张三2", Time = Convert.ToDateTime("2013/12/20 13:20") });
            list2.Add(new Person() { Age = 5, Name = "李四2", Time = Convert.ToDateTime("2013/12/20 14:20") });
            list2.Add(new Person() { Age = 3, Name = "王五2", Time = Convert.ToDateTime("2013/12/20 13:40") });

            list1 = list1.Concat(list2).ToList(); //合并多个list<T>

            list1 = list1.OrderByDescending(i => i.Time).ToList(); //降序排列
            //list.OrderBy(i => i.Time);升序排列

            Repeater1.DataSource = list1;
            Repeater1.DataBind();
        }
    }


    public class Person
    {
        private int age;

        public int Age
        {
            get { return age; }
            set { age = value; }
        }
        private string name;

        public string Name
        {
            get { return name; }
            set { name = value; }
        }

        private DateTime time;

        public DateTime Time
        {
            get { return time; }
            set { time = value; }
        }

    }
}

前台代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ListTest.aspx.cs" Inherits="WebFormTest.TestCollect.ListTest" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>无标题页</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <table border="1" cellspacing="0" cellpadding="0" width="100%">
            <asp:Repeater ID="Repeater1" runat="server">
                <ItemTemplate>
                    <tr>
                        <td>
                            <%#Eval("Age") %>
                        </td>
                        <td>
                        <%#Eval("Name") %>
                        </td>
                        <td>
                        <%#Eval("Time") %>
                        </td>
                    </tr>
                </ItemTemplate>
            </asp:Repeater>
        </table>
    </div>
    </form>
</body>
</html>

效果展示:

 

转载于:https://www.cnblogs.com/zxx193/p/3484195.html

using System; using System.Collections.Generic; using System.Linq; using Script.Methods; public partial class UserScript : ScriptMethods, IProcessMethods { int pointXNum; int pointYNum; float[] pointXInput = new float[32]; // 输入的X坐标数组 float[] pointYInput = new float[32]; // 输入的Y坐标数组 // 坐标结构体 struct Point { public float X; public float Y; } List<Point> originPointList = new List<Point>(); // 原始点列表 List<Point> sortedPointList = new List<Point>(); // 排序后的点列表 /// <summary> /// 初始化函数 /// </summary> public void Init() { // 可以在这里进行其他变量的初始化 } /// <summary> /// 流程执行函数 /// </summary> /// <returns>处理结果</returns> public bool Process() { // 清空列表 originPointList.Clear(); sortedPointList.Clear(); // 获取输入的坐标 GetFloatArrayValue("in0", ref pointXInput, out pointXNum); GetFloatArrayValue("in1", ref pointYInput, out pointYNum); // 检查输入的有效性 if (pointXNum > 0 && pointXNum == pointYNum) { // 添加输入点到原始列表 for (int i = 0; i < pointXNum; i++) { originPointList.Add(new Point { X = pointXInput[i], Y = pointYInput[i] }); } // 按Y坐标排序 var ySortedPointList = originPointList.OrderBy(p => p.Y).ToList(); // 按行聚类排序 List<Point> rowPointList = new List<Point>(); for (int i = 0; i < ySortedPointList.Count; i++) { // 如果是第一点,直接添加 if (i == 0 || Math.Abs(ySortedPointList[i].Y - ySortedPointList[i - 1].Y) >= 10) { // 如果当前行有点,则将其按X坐标排序后添加到最终列表 if (rowPointList.Count > 0) { sortedPointList.AddRange(rowPointList.OrderBy(p => p.X)); rowPointList.Clear(); } } // 添加当前点到当前行 rowPointList.Add(ySortedPointList[i]); } // 添加最后一行 if (rowPointList.Count > 0) { sortedPointList.AddRange(rowPointList.OrderBy(p => p.X)); } } // 输出排序后的点 for (int i = 0; i < sortedPointList.Count; i++) { SetFloatValueByIndex("outX", sortedPointList[i].X, i, sortedPointList.Count); SetFloatValueByIndex("outY", sortedPointList[i].Y, i, sortedPointList.Count); SetFloatValueByIndex("outIndex", i+1, i, sortedPointList.Count); } return true; } }
最新发布
07-18
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值