Dyalog APL:过滤命名空间数组后如何获取无嵌套结果?
解决APL命名空间数组过滤后的嵌套问题
你的问题出在误用了逐元素操作符¨,tmpSymbolsT是包含多个命名空间的数组,不需要逐个元素处理,直接对整个数组应用过滤逻辑即可。
修正后的代码
tmpSymbolsT←(data←⎕JSON(HttpCommand.Get'api.binance.com/api/v3/exchangeInfo').Data).symbols tmpSymbols←{(⍵.status≡'TRADING')⌿⍵} tmpSymbolsT
或者更简洁的写法(省去命名函数):
tmpSymbolsT←(data←⎕JSON(HttpCommand.Get'api.binance.com/api/v3/exchangeInfo').Data).symbols tmpSymbols←(⊢.status≡'TRADING')⌿ tmpSymbolsT
原因说明
原来的代码里⍨¨会把过滤函数单独作用于tmpSymbolsT的每一个元素,每个元素本身是单个命名空间,过滤后会生成只包含该元素的单元素数组,最终结果就变成了数组套数组的嵌套结构。去掉¨后,函数直接处理整个tmpSymbolsT数组:
⍵.status≡'TRADING'会生成与原数组长度一致的布尔数组,标记每个元素是否符合条件⌿用这个布尔数组过滤原数组,得到的结果结构就和tmpSymbolsT完全一致,不会有嵌套包装。
内容的提问来源于stack exchange,提问作者конструктор
相关产品推荐
相关产品推荐

