C# 按参数对集合linq查询排序
有一个列表,SomeObject具有属性TargetObject。 我需要的是创建一个列表,其中一些对象具有以下TargetObject sou 1(TO_1)| sou 2(TO_2)| sou 3(TO_3)| sou 4(TO_1)| sou 5(TO_1)| sou 6(TO_1)| sou 7(TO_1)| sou 8(TO_2)| sou 9(TO_2)| sou 10(TO_4) 必须变成 sou 1(TO_1)| sou 2(TO_2)| sou 3(TO_3)| sou 10(TO_4)| sou 4(TO_1)| sou 8(TO_2)| sou 6(TO_1)| sou 9(TO_2)| sou 7(TO_1)| sou 5(TO_1) 最后,我想用MaxDegreeOfParallelism=5运行Parallel.ForEach(List),这样5个项目的每个循环将永远不会同时有相同的TargetObjectC# 按参数对集合linq查询排序,c#,linq,C#,Linq,有一个列表,SomeObject具有属性TargetObject。 我需要的是创建一个列表,其中一些对象具有以下TargetObject sou 1(TO_1)| sou 2(TO_2)| sou 3(TO_3)| sou 4(TO_1)| sou 5(TO_1)| sou 6(TO_1)| sou 7(TO_1)| sou 8(TO_2)| sou 9(TO_2)| sou 10(TO_4) 必须变成 sou 1(TO_1)| sou 2(TO_2)| sou 3(TO_3)| sou 10(
谢谢最简单的方法(至少是我能想到的最简单的方法)是首先按TargetObject对它们进行排序,然后按TargetObject对它们进行分组,然后每次使用每个组中的一个元素重建集合
List<SomeObject> CustomSort( List<SomeObject> list)
{
var ordered = list.OrderBy(x => x.TargetObject); // might not be necessary. Not sure if group by orders the group or not.
var groups = ordered.GroupBy(x => x.x.TargetObject);
List<SomeObject> res = new List<SomeObject>();
int position = 0;
while(res.Count < list.Count)
{
foreach (var grp in groups)
{
SomeObject current = grp.ElementAtOrDefault(position);
if ( current != null) res.Add(current);
}
position ++;
}
return res;
}
列表自定义排序(列表)
{
var ordered=list.OrderBy(x=>x.TargetObject);//可能不是必需的。不确定group by是否对组进行排序。
var groups=ordered.GroupBy(x=>x.x.TargetObject);
List res=新列表();
int位置=0;
while(res.Count
PS:此代码未经优化,但仅用于演示方法。这是用于不同目的的
InterlaceBy
扩展方法,但似乎适用于您的案例
List<int> list = new List<int>() {1,2,3,1,1,1,1,2,2,4 }; //your TO's
var newlist = list.InterlaceBy(x => x).ToList(); //1,2,3,4,1,2,1,2,1,1
public static partial class MyExtensions
{
public static IEnumerable<T> InterlaceBy<T, S>(this IEnumerable<T> input, Func<T, S> selector)
{
return input
.GroupBy(selector)
.SelectMany(g => g.Select((x, i) => new { key = i, value = x }))
.OrderBy(x => x.key)
.Select(x => x.value);
}
}
List List=newlist(){1,2,3,1,1,1,1,2,4}//你的目标是什么
var newlist=list.InterlaceBy(x=>x.ToList()//1,2,3,4,1,2,1,2,1,1
公共静态部分类MyExtensions
{
公共静态IEnumerable InterlaceBy(此IEnumerable输入,函数选择器)
{
返回输入
.GroupBy(选择器)
.SelectMany(g=>g.Select((x,i)=>new{key=i,value=x}))
.OrderBy(x=>x.key)
.选择(x=>x.value);
}
}
请您重新表述一下您的问题好吗?我不擅长重新表述,收集来自。。。这是我能做的最好的解释,对不起。