javascript - 为什么从 Dictionary 返回 JsonResult 会更改排序顺序?
问题描述
我有以下控制器操作:
public JsonResult GetInvestors(int bank)
{
var investors = _context.Investors
.Where(i => i.BankNumber == bank)
.Select(i => new { InvestorId = i.InvestorId.ToString(), InvestorName = i.InvestorName + " (" + i.BankNumber + ")" })
.OrderBy(i => i.InvestorName)
.ToDictionary(i => i.InvestorId, i => i.InvestorName);
return Json(investors, JsonRequestBehavior.AllowGet);
}
以下 javascript 调用该操作,现在只是启动调试器,以便我可以浏览结果:
function getInvestors(bank)
{
$.ajax
({
url: "/InvestorDetail/GetInvestors",
type: "POST",
data: { bank: bank },
dataType: "json",
success: function (returnedData) { debugger; }
});
}
如果我在控制器动作中观看investors
,它是按投资者名称排序的,这就是我想要的。但是,当我使用 javascript 调试器并 watchreturnedData
时,数据按投资者 ID 排序。
或者,如果我将 OrderBy 放在 ToDictionary 之后并按值排序,则在 javascript 调试器中,结果的 json 结构是不同的,但它是按我想要的投资者姓名排序的。
为什么从字典返回时排序顺序会改变?
谢谢你。
解决方案
您无法对字典进行排序,尽管您可以获得已排序字典的表示!
你可以尝试类似的东西
import collections
Dictionary_Sorted = collections.OrderedDict(x)
x 是具有键值对的对象。
C# 也是如此。
我喜欢通过说将我的字典更改为列表。
var newList = thisDictionary.ToList();
newList.Sort((a,b) => a.Value.CompareTo(b.Value));
我喜欢一个班轮的方法。它简单而优雅。如果您想对其进行降序排序,请按此切换值。
newList.Sort((a,b) => b.Value.CompareTo(a.Value));
推荐阅读
- python - 在 python 3.4.3 上安装熊猫时,出现错误 - 没有模块 tempita
- wordpress - 如何在产品循环中显示 WooCommerce 价格变化
- java - java.net.SocketException:连接重置。休息 API + 套接字
- c# - 如何测试我的令牌是否使用 IdentityServer4 刷新?
- mongodb - Mongodb对查找数据的限制、偏移和排序
- c# - c#在打开文件对话框中选择图像后获取图像目录路径
- vue.js - console.log 在 vue.js 脚本中不起作用
- python - 分组熊猫数据框中的嵌套字典
- git - 我可以 git push 另一个目录吗?
- neural-network - 前馈网络的感受野