如何在C#中对包含每个用户的赢家和输家数据的json进行排序?
现在,我有一个json,比如如何在C#中对包含每个用户的赢家和输家数据的json进行排序?,c#,json,linq,C#,Json,Linq,现在,我有一个json,比如 { "Bob": { "Wins": 4, "Loses" : 5 }, "Dave": { "Wins": 8, "Loses" : 2 }, "Mike": { "Wins": 4, "Loses" : 2 } } 我想先按赢的次数对每个玩家进行排序,如果两个或两个以上的玩家有相同的赢的次数,那么损失最少的玩家排名会更高。在这个例子中,它将是戴夫,迈克,鲍勃。是否有一个LINQ查询可以用来
{
"Bob": {
"Wins": 4,
"Loses" : 5
},
"Dave": {
"Wins": 8,
"Loses" : 2
},
"Mike": {
"Wins": 4,
"Loses" : 2
}
}
我想先按赢的次数对每个玩家进行排序,如果两个或两个以上的玩家有相同的赢的次数,那么损失最少的玩家排名会更高。在这个例子中,它将是戴夫,迈克,鲍勃。是否有一个
LINQ
查询可以用来有效地对其进行排序?理想情况下,我想要一个按顺序返回的数组或列表。您可以将Json反序列化到集合中,根据需要对其进行排序,然后再次序列化
比如说,
var results = JsonConvert.DeserializeObject<Dictionary<string,Result>>(json);
var sortedDictionary = results.Select(kvp => new {User=kvp.Key,Result=kvp.Value})
.OrderByDescending(x=>x.Result.Wins)
.ThenBy(x=>x.Result.Loses)
.ToDictionary(key=>key.User,
value=>new Result
{
Wins = value.Result.Wins,
Loses=value.Result.Loses
}
);
var sortedJson = JsonConvert.SerializeObject(sortedDictionary);
输出
{"Dave":{"Wins":8,"Loses":2},"Mike":{"Wins":4,"Loses":2},"Bob":{"Wins":4,"Loses":5}}
将JSON的读取和排序分离为两个函数:
- ReadJSon:输入您的Json数据;输出包含读取数据的对象序列
- 排序:输入读取JSON数据的顺序,输出请求的排序
class PlayerResult
{
public Name {get; set;}
... // possible other properties
public int Wins {get; set;}
public int Losses {get; set;}
}
然后需要一个过程将JSON读入PlayerResults序列:
IEnumerable<PlayerResult> ReadJson(...)
{
// TODO: implement
}
1.设计一个类来保存您的数据,然后将您的JSON数据序列化到这个类,然后2。使用
linq
对类进行排序。分别用谷歌搜索这两个选项将告诉你该做什么,并希望有助于学习,而不是让别人为你编写代码。
IEnumerable<PlayerResult> ReadJson(...)
{
// TODO: implement
}
IOrderedEnumerable<PlayerResult> OrderByWinsAndLosses(this IEnumerable<PlayerResult> playerResults)
{
return playerResults.OrderByDescending(playerResult => playerResult.Wins)
.ThenBy(playerResult => playerResult.Losses);
}
var result = ReadJson(...)
.Where(player => player.Name.StartsWith("A")
.OrderByWinsAndLosses()
.OrderBy(player => player.Name)
.ToList();