作为标题。
例如,我有一个包含10个项目的列表。
Id Name GroupId
1 abc 123
2 abc1 124
3 abc2 125
4 abc3 126
5 abc4 123
6 abc5 123
7 abc6 124
8 abc7 125
9 abc8 127
10 abc9 124
Var groups = items.OrderBy(m => m.GroupId).GroupBy(o => o.GroupId);
然后我有5个小组。
第1组(123):{1,5,6}
第2组(124):{2,7,10}
Group3(125):{3,8}
Group4(126):{4}
Group5(127):{9}
现在,我想根据新组的最大数量重新组合它们。
例如:如果maxQuantity = 4
newGroup1:{1,5,6,4}(4是因为group2和group3不能在newGroup1中分组)“他们有多个项目,newGroup1只能插入1个项目。”
newGroup2:{2,7,10,9}(与newGroup1相同的解释)
newGroup3:{3,8}(只留下2个项目,然后他们必须组合在一起。)
有关编码的想法吗?我在坐在椅子上浪费了8个小时来思考这个问题并且还在计算中。
*另一种情况,如果maxQuantity = 2
newGroup1: {1, 5}
newGroup2: {6, 4}
newGroup3: {2, 7}
newGroup4: {10, 9}
newGroup5: {3, 8}
与顶部示例相同的解释
答案 0 :(得分:0)
基本理念:
<强>的伪代码:强>
sort groups by quantity (biggest group first)
i = 0
j = groups.size-1
while i <= j
// if the indices met, pick either
// if the two groups are larger than max quantity, simply pick the larger one
if i == j || union(groups[i], groups[j]).size > maxQuantity
output groups[i]
i++
else
output union(groups[i], groups[j])
i++
j--
如果元素是唯一的:
union(groups[i], groups[j]).size = groups[i].size + groups[j].size
<强> LINQ吗
这很可能超出了LINQ的功能。至于C#代码,它应该很简单,可以从伪代码中派生出来。