Dyalog APL:如何像filter()一样过滤数组

问题描述 投票:0回答:1

我需要从数组(命名空间)中过滤掉所有不满足所需条件的值:字段“status”=“TRADING”

我使用这个变体

tmpSymbolsT←(data←⎕JSON(HttpCommand.Get'api.binance.com/api/v3/exchangeInfo').Data).symbols
tmpSymbols←{(⍵.status≡'TRADING')⌿⍵}⍨¨tmpSymbolsT

但是,它返回包装器中的每一行,并且我想要干净的行

      tmpSymbols[1] ⍝ I have
┌─────────────────────────────────┐
│┌───────────────────────────────┐│
││ #.[JSON object].[JSON object] ││
│└───────────────────────────────┘│
└─────────────────────────────────┘


      tmpSymbolsT[1] ⍝ I need like this
#.[JSON object].[JSON object]

如何做?

arrays nested filtering apl dyalog
1个回答
1
投票

这里的问题是您单独过滤每个(

¨
)对象,而不是过滤整个集合。

(顺便说一句,你还有一个不必要的通勤(

),在这种情况下它没有任何作用。)

所以,你真的想要类似

tmpSymbols←{(⍵.status≡'TRADING')⌿⍵}tmpSymbolsT
的东西 但现在
⍵.status
是一个状态向量(列表),它当然不会匹配 (
) 单个状态
'TRADING'
。您有几个选项可以解决此问题:

  1. ⍵.status≡¨⊂'TRADING'
    使用显式的 every 并包含 (
    ) 单个状态,因此它可用于每次比较。
  2. 'TRADING'∘≡¨⍵.status
    将单个状态绑定 (
    ) 到匹配函数,从而派生出“正在交易”函数,然后将其应用于每个状态。
  3. ⍵.status∊⊂'TRADING'
    ,包含单个状态并检查属于 (
    ) 单个状态数组成员的所有状态。

这是执行您想要的操作的代码示例:

      tmpSymbolsT←(data←⎕JSON(HttpCommand.Get'api.binance.com/api/v3/exchangeInfo').Data).symbols
      tmpSymbols←{(⍵.status∊⊂'TRADING')⌿⍵}tmpSymbolsT
      tmpSymbols[1]
#.[JSON object].[JSON object]
© www.soinside.com 2019 - 2024. All rights reserved.