当前位置: 首页 > 知识库问答 >
问题:

Swift:打开字典会弄乱其中值的顺序

劳和歌
2023-03-14

  print("INSIDE CMSessionManger.login result[menus]: ", result["menus"]!)
                                /*
                                 INSIDE CMSessionManger.login result[menus]:  {
                                     1 =     {
                                         id = 1;
                                         label = Accueil;
                                         maxNumberPerPage = 20;
                                     };
                                     2 =     {
                                         id = 2;
                                         label = "Mes favoris";
                                         maxNumberPerPage = 20;
                                     };
                                     3 =     {
                                         id = 3;
                                         label = "Les s\U00e9lections";
                                         maxNumberPerPage = 20;
                                     };
                                     4 =     {
                                         id = 4;
                                         label = "Acc\U00e8s illimit\U00e9";
                                         maxNumberPerPage = 20;
                                     };
                                 }
                                 **/
                                print("INSIDE CMSessionManger.login  type(of: result[menus]!: ",  type(of: result["menus"]!))
                                
                                if let menus = result["menus"] as? [String: Any]{
                                                                   print("INSIDE CMSessionManger.login Setting menus")
                                                                   print("INSIDE CMSessionManger.login menus: ",  menus)
                                                                  /*
                                                                     INSIDE CMSessionManger.login menus:  ["2": {
                                                                         id = 2;
                                                                         label = "Mes favoris";
                                                                         maxNumberPerPage = 20;
                                                                     }, "4": {
                                                                         id = 4;
                                                                         label = "Acc\U00e8s illimit\U00e9";
                                                                         maxNumberPerPage = 20;
                                                                     }, "1": {
                                                                         id = 1;
                                                                         label = Accueil;
                                                                         maxNumberPerPage = 20;
                                                                     }, "3": {
                                                                         id = 3;
                                                                         label = "Les s\U00e9lections";
                                                                         maxNumberPerPage = 20;
                                                                     }]
                                                                     **/
                                                                 
                                                                    
                                                               }

我真的不明白为什么一个简单的解包会改变字典值的顺序。

共有1个答案

归明诚
2023-03-14

字典是无序的集合。无法保证您将以添加项目的相同顺序取回项目。看起来您的键是数字,并且在每个字典条目的“id”键/值对中重复。如果您确实希望数据具有特定的顺序,为什么不将项存储到数组中呢?

您可以使用Dictinary.Values属性将字典中的条目放到数组中,然后按其id值对这些条目进行排序。

 类似资料:
  • 问题内容: 我正在使用json模块创建一个包含类似条目的文件 但是,在创建的-file文件中,字段顺序错误 这是一个问题,因为-strings的替换现在不正确。 如何强制功能保持给定顺序? 问题答案: 像其他答案正确指出的那样,在Python 3.6之前,字典是 无序的 。 就是说,JSON还应该具有 _无序_映射,因此原则上在JSON中存储有序字典没有多大意义。具体来说,这意味着在读取JSON对

  • 问题内容: 我是Swift的新手,正在上课学习iOS编程。我发现自己很困惑如何在字典数组中搜索字符串值并将字符串值转储到数组中。这是从我的Xcode游乐场获取的。 我正在尝试找出方法:1)搜索字典数组2)将搜索结果转储到数组(由我创建) 这些是角色字典。 这是上面列出的字符词典的数组。 这是我要编写的功能。 对于在此方面取得进展的任何帮助,我将不胜感激。我已经为示例进行了挖掘,但是我很快就会找到一

  • 问题内容: 我习惯于Python的defaultdict的一种模式是字典,如果未显式设置给定键的值,则该字典将返回默认值。尝试在Swift中做到这一点有点冗长。 我意识到我可以创建一个做到这一点的类,但是随后必须通过属性访问实际的Dictionary才能使用其他任何普通的Dictionary方法 有更好的模式吗? 问题答案: 使用Swift 2,您可以实现类似于python版本的扩展名: 后面的闭

  • 问题内容: 我正在尝试创建一个字典变量,其值是两种类型之一。我的尝试的一个例子应该使这一点更清楚: 这引发了仅语法功能类型可以通用的编译器错误。我想知道是否有可能,我只是不知道正确的语法? 问题答案: 为此所需的工具是带有关联数据的枚举。 这样可以捕获“一个浮标或布尔对象”,并提供更好的文档记录和类型安全性。 要卸载数据,请使用switch语句: 使用switch语句可确保覆盖所有可能的类型,并防

  • 问题内容: 我有一本字典 但是,我需要字典的顺序不同: 做这个的最好方式是什么? 问题答案: 字典 没有顺序 。因此,没有办法做到这一点。 如果您使用的是python2.7 +,则可以使用-在这种情况下,您可以使用检索项目列表,然后将其反向并从反向列表中创建一个新项: 如果您使用的是旧版python,则可以从http://code.activestate.com/recipes/576693/获得

  • 问题内容: 是否有-(NSArray *)keysSortedByValueUsingSelector:(SEL)comparator的类似物? 如何在不强制转换为NSDictionary的情况下执行此操作? 我试过了,但这似乎不是一个好的解决方案。 例: 问题答案: 尝试: 更新: 从beta 3更新到新的数组语法和排序语义。请注意,我正在使用,而不是在最大程度上减少数组复制。该代码可以做得更紧

  • 问题内容: 我有以下数据框: 我想根据预期的输出更改列的顺序: 我对行的索引不感兴趣。 我已经尝试过以下基于其他stackoverflow / google帖子的代码: 这样可以正确地更改索引,但是其他所有列都可以获取值 我也尝试过: 这样可以正确更改索引,但其他列不会切换,因此会弄乱数据框。 也: 但这无济于事。 我该如何工作? 问题答案: 对于需要创建索引列: 或使用有序分类:

  • 问题内容: 码: 打印。我不确定该方法如何确定l中关键字的顺序。但是,我希望能够以“适当”的顺序检索关键字。当然,正确的顺序将创建列表。 和这个: 问题答案: 你可以使用OrderedDict(需要Python 2.7)或更高版本。 另外,请注意,由于dict你使用进行创建的操作已经忘记了元素的顺序,因此该操作无效。相反,你想使用。 如文档中所述,对于低于python 2.7的版本,你可以使用此配