我正在尝试从另一个API获得响应,然后将匹配的值进行分组,以在匹配时将其发送到另一个API中。我认为一种方法是通过对每个项目进行一次foreach来重建整个对象,但是我正在寻找一种更简单的方法(可能通过Linq?)来对这些数据进行分组。
为了便于阅读,在JSON中显示示例,最终将是c#对象
输入:
[{
"itemID": 123,
"orderedItemID": 1,
"queuePosition": 1
},
{
"itemID": 123,
"orderedItemID": 2,
"queuePosition": 3
},
{
"itemID": 123,
"orderedItemID": 3,
"queuePosition": 5
},
{
"itemID": 456,
"orderedItemID": 10,
"queuePosition": 1
},
{
"itemID": 456,
"orderedItemID": 14,
"queuePosition": 2
}]
所需的输出
[{
"itemID": 123,
"queuePosition": [1,3,5]
},
{
"itemID": 456,
"queuePosition": [1,2]
}]
有关输出类的更多信息:
[DataContract]
public sealed class QueuePosition
{
[DataMember(Name = "itemID")]
public int ItemID { get; set;}
[DataMember(Name = "queuePosition")]
public IEnumerable<int> QueuePosition { get; set;}
}
答案 0 :(得分:1)
尝试GroupBy
;如果您有对象的集合,请说一个数组:
var source = new MyObject[] {
new MyObject(itemID : 123, orderedItemID : 1, queuePosition : 1),
...
new MyObject(itemID : 456, orderedItemID : 14, queuePosition : 2),
};
代码可以是
QueuePosition[] result = source
.GroupBy(item => item.itemID)
.Select(group => new QueuePosition() {
ItemID = group.Key,
QueuePosition = group
.Select(item => item.queuePosition)
.ToArray()
})
.ToArray();
答案 1 :(得分:1)
可以使用Linq如下进行分组,前提是使用了某些实际类型。
col_null_g_75p=list({i for i in aggregated_dict if aggregated_dict[i] > 0.75})
print(col_null_g_75p)
['A', 'E']
df = df.drop(*col_null_g_75p)
df.show()
+----+----+----+
| B| C| D|
+----+----+----+
| 21| 12|null|
|null| 3| 1|
| 40|null| 10|
| 2|null| 6|
| 8| 0| 2|
+----+----+----+
答案 2 :(得分:0)