110,546
社区成员
发帖
与我相关
我的任务
分享
public static class TestData
{
public static List<TestInfo> List = new List<TestInfo>()
{
new TestInfo() { Id = 1, ParentId = null, OrderId = 2 },
new TestInfo() { Id = 2, ParentId = null, OrderId = 1 },
new TestInfo() { Id = 3, ParentId = 2, OrderId = 1 },
new TestInfo() { Id = 4, ParentId = 2, OrderId = 3 },
new TestInfo() { Id = 5, ParentId = 2, OrderId = 2 },
new TestInfo() { Id = 6, ParentId = 1, OrderId = 2 },
new TestInfo() { Id = 7, ParentId = 1, OrderId = 1 },
new TestInfo() { Id = 8, ParentId = 5, OrderId = 1 },
new TestInfo() { Id = 9, ParentId = 2, OrderId = 4 },
new TestInfo() { Id = 10, ParentId = null, OrderId = 3 }
};
}
public class TestInfo
{
public int Id { get; set; }
public int? ParentId { get; set; }
public int OrderId { get; set; }
}
static void Main(string[] args)
{
var data = TestData.List;
Func<List<int>, int, List<int>> add =
(x, id) =>
{
x.Insert(0, id);
return x;
};
Func<List<TestInfo>, int?, List<int>> sort = null;
sort = (x, id) =>
{
List<int> r = new List<int>();
var q = from i in x where i.ParentId == id orderby i.OrderId select add(sort(x, i.Id), i.Id);
foreach (var item in q.ToList())
{
r.AddRange(item);
}
return r;
};
var result = sort(data, null);
foreach (var item in result)
{
Console.Write(item + " ");
}
/*2 3 5 8 4 9 1 7 6 10*/
}
using System.Collections.Generic;
namespace csdnTest
{
public class TestInfo
{
public int Id { get; set; }
public int? ParentId { get; set; }
public int OrderId { get; set; }
}
class Program
{
public static List<TestInfo> TestList = new List<TestInfo>()
{
new TestInfo() { Id = 1, ParentId = null, OrderId = 2 },
new TestInfo() { Id = 2, ParentId = null, OrderId = 1 },
new TestInfo() { Id = 3, ParentId = 2, OrderId = 1 },
new TestInfo() { Id = 4, ParentId = 2, OrderId = 3 },
new TestInfo() { Id = 5, ParentId = 2, OrderId = 2 },
new TestInfo() { Id = 6, ParentId = 1, OrderId = 2 },
new TestInfo() { Id = 7, ParentId = 1, OrderId = 1 },
new TestInfo() { Id = 8, ParentId = 5, OrderId = 1 },
new TestInfo() { Id = 9, ParentId = 2, OrderId = 4 },
new TestInfo() { Id = 10, ParentId = null, OrderId = 3 }
};
public static Dictionary<int?, TestInfo> TestDict = new Dictionary<int?, TestInfo>();
public static Stack<TestInfo> StackA = new Stack<TestInfo>();
public static Stack<TestInfo> StackB = new Stack<TestInfo>();
static void Main(string[] args)
{
foreach (TestInfo item in TestList)
TestDict.Add(item.Id, item);
TestList.Sort(CompareTestInfo);
}
static int CompareTestInfo(TestInfo infoA, TestInfo infoB)
{
StackA.Clear();
while (infoA.ParentId != null)
{
StackA.Push(infoA);
infoA = TestDict[infoA.ParentId];
}
StackB.Clear();
while (infoB.ParentId != null)
{
StackB.Push(infoB);
infoB = TestDict[infoB.ParentId];
}
while (infoA.Equals(infoB))
{
if (StackA.Count > 0)
infoA = StackA.Pop();
else
return -1;
if (StackB.Count > 0)
infoB = StackB.Pop();
else
return 1;
}
return infoA.OrderId.CompareTo(infoB.OrderId);
}
}
}
static void Main()
{
var q = from i in TestData.List orderby i.OrderId, i.Id select i.Id;
var result = q.ToArray();
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
//最终正确输出的排序是//2 3 5 8 4 9 1 7 6 10
List<TestInfo> ListTestInfo = InitData();
List<TestInfo> ResultList = new List<TestInfo>();
var Results = ListTestInfo.OrderBy(t => t.OrderId);
ResultList.AddRange(ListTestInfo.OrderBy(t => t.OrderId));
Console.ReadKey();
}
static List<TestInfo> InitData()
{
List<TestInfo> ret = new List<TestInfo>()
{
new TestInfo() { Id = 1, ParentId = null, OrderId = 7 },
new TestInfo() { Id = 2, ParentId = null, OrderId = 1 },
new TestInfo() { Id = 3, ParentId = 2, OrderId = 2 },
new TestInfo() { Id = 4, ParentId = 2, OrderId = 5},
new TestInfo() { Id = 5, ParentId = 2, OrderId = 3 },
new TestInfo() { Id = 6, ParentId = 1, OrderId = 9 },
new TestInfo() { Id = 7, ParentId = 1, OrderId = 8 },
new TestInfo() { Id = 8, ParentId = 5, OrderId = 4 },
new TestInfo() { Id = 9, ParentId = 2, OrderId = 6 },
new TestInfo() { Id = 10, ParentId = null, OrderId = 10 }
};
return ret;
}
}
public class TestInfo
{
public int Id { get; set; }
public int? ParentId { get; set; }
public int OrderId { get; set; }
}
}