Comment obtenir le nième élément d'un 10-tuple dans Haskell?
- Je obtenir nième élément dans un Haskell tuple. Et les tuples sont comme ceci :
(3,5,"String1","String2","String3","String4","String5","String6","String7","String8","String9","String10"). Pouvez-vous me donner une idée pour que je puisse résoudre ce problème?
Merci.
source d'informationauteur jason
Vous devez vous connecter pour publier un commentaire.
Comme vous pouvez ou ne pouvez pas savoir fst et snd seulement pour les 2-élément n-uplets ie
Vous devez écrire vous même autant que je sache
Comme vous pouvez le voir, vous pouvez définir votre propre type.
Vous pourriez le faire avec le pattern matching. Comme vous pouvez le match contre un deux - ou trois-valeur du tuple, vous pouvez faire correspondre à l'encontre d'un dix-valeur du tuple.
Cependant, les chances sont que vous n'avez pas voulez de le faire. Si vous essayez d'obtenir le n-ième valeur d'un tuple, vous avez presque certainement utiliser le mauvais type. En Haskell, les n-uplets de différentes longueurs sont différentes types--ils sont fondamentalement incompatibles. Tout comme
Int
etString
sont différents,(Int, Int)
et(Int, Int, Int)
sont également totalement différentes.Si vous voulez un type de données où vous pouvez obtenir le n-ième élément, vous voulez une liste: quelque chose comme
[String]
. Avec les listes, vous pouvez utiliser le!!
opérateur d'indexation (qui commence à 0), de sorte que vous pourriez faire:pour obtenir le 10ème élément.
Donné votre exemple, je suppose que vous voulez un type comme
(Int, Int, [String])
plutôt qu'un gigantesque tuple. Cela vous permettra d'avoir deux numéros et le nombre de chaînes; vous pouvez obtenir les chaînes à l'index de l'aide de l'!!
opérateur comme ci-dessus.Vous aimeriez l'utiliser la sélection des fonctions à partir de la n-uplet paquet.
Si vous avez seulement besoin de le faire une fois par tuple, et vous avez besoin de tous les éléments à la fois, vous pouvez simplement utiliser
et utiliser directement les valeurs.
J'ai vu votre question lorsque j'étais à la recherche d'une solution pour le même problème. J'ai lu les "!!" l'opérateur est une mauvaise solution. J'ai pensé à une solution:
Par exemple, si vous avez trois éléments pour chaque tuple dans votre liste, vous pouvez le faire:
Maintenant, certains cas de test:
Explication, étape par étape, de la fonction ci-dessus:
1.Partager des éléments et de mettre un indice:
2.Pour chaque liste, mettre un index. Maintenant, nous avons des groupes et à des postes au sein de chaque groupe.
3.On peut sélectionner un groupe. Par exemple, le numéro de groupe 1 (premier groupe est le 0) avec "snd(x)==1"
4.Nous avons une liste de listes. Whe concaténer des tuples dans une seule liste de tuples
5.Enfin, nous obtenons un élément à l'index. Dans cet exemple, nous obtenons le 2ème élément (le premier élément est la position "0")