Comment trouver la liste qui contient le plus grand nombre d'éléments dans une liste de liste?
Par exemple, disons que j'ai la liste de liste suivante:
l : (`AAPL`GOOG;`AAPL;`MSFT`JPM`GOOG`BNP;`JPM)
et je veux renvoyer `MSFT`JPM`GOOG`BNP
qui est la liste avec le plus grand nombre d'éléments (4 éléments).
p >
4 Réponses :
Une façon est:
first l where c=max c:count each l
Compte chaque liste, obtient la position du plus grand nombre et les indexe dans la liste d'origine avec ceci
Vous devez d'abord ajouter
au début pour obtenir la liste réelle. Sans cela, c'est une liste de liste.
Une autre façon de le faire est
1 # desc l
ou vous pouvez remplacer 1 #
par first
pour le rendre plus lisible
Ce n'est donc pas la meilleure réponse, considérez ce qui suit. q) l: ( AAPL
GOOG; AAPL;
MSFT JPM
GOOG BNP;
ZZZZ XXXX code> YYYY) q) l idesc l `` ``
ZZZZ
XXXX YYYY``` Il énumère les symboles, donc le
ZZZZ` est supérieur à MSFT code>
Essentiellement, cela échouera en fonction des symboles utilisés dans chaque liste, Z
> A
pour les symboles dans kdb
Pour le plaisir, voici une autre option
l first idesc l
Trouvez la note décroissante la plus élevée et utilisez-la comme index.
Cela ne donnera pas la bonne réponse pour toutes les listes. Essayez cet exemple de Callum Biggs answer: (`AAPL`GOOG;` AAPL; `MSFT`JPM`GOOG`BNP;` ZZZZ`ZZZZ`ZZZZ)
La réponse actuellement acceptée échouera en fonction de la composition des symboles.
q)l first idesc count each l
Ce qui suit fonctionnera, quel que soit le contenu de la liste
q)l : (`AAPL`GOOG;`AAPL;`MSFT`JPM`GOOG`BNP;`ZZZZ`ZZZZ`ZZZZ) q)l first idesc l `ZZZZ`ZZZZ`ZZZZ