1
votes

Trouver la liste avec le plus grand nombre d'éléments dans une liste de liste

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 >

kdb

0 commentaires

4 Réponses :


2
votes

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


1 commentaires

Vous devez d'abord ajouter au début pour obtenir la liste réelle. Sans cela, c'est une liste de liste.



0
votes

Une autre façon de le faire est

1 # desc l

ou vous pouvez remplacer 1 # par first pour le rendre plus lisible


2 commentaires

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 YYYY) q) l idesc l `` `` ZZZZ XXXX YYYY``` Il énumère les symboles, donc le ZZZZ` est supérieur à MSFT


Essentiellement, cela échouera en fonction des symboles utilisés dans chaque liste, Z > A pour les symboles dans kdb



0
votes

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.


1 commentaires

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)



2
votes

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


0 commentaires