En scala, comment puis-je trouver la taille d'un élément de tableau
Scala débutant, Avoir un tableau où un élément est un tableau:
val aaa = Array("a", "b", Array(1, 2, 3), "c")
Cela fonctionne:
In []: aaa(2)
Out[]: Array(1, 2, 3)
Cela fonctionne
In []: Array(1, 2, 3).size
Out[]:3
Ce n'est pas:
In []: aaa(2).size
Out[]:
Name: Compile Error
Message: <console>:15: error: value size is not a member of
java.io.Serializable
aaa(2).size
^
Ce que je fais mal?
Thnaks
Trouver le type de
Comment dois-je faire?
Il semble être un Tableau
Ce n'est pas une bonne idée d'avoir un tableau avec plusieurs types, comme dans votre exemple. Pourquoi avez-vous envie de faire ?
Le type de
aaa
variableComment dois-je faire?
Il semble être un Tableau
Ce n'est pas une bonne idée d'avoir un tableau avec plusieurs types, comme dans votre exemple. Pourquoi avez-vous envie de faire ?
Le type de
aaa
est Array[java.io.Serializable]
Donc, quand vous ne aaa(2)
vous obtenez un élément de type java.io.Serializable
qui n'a pas une méthode à la taille définie.OriginalL'auteur Ezer K | 2016-06-13
Vous devez vous connecter pour publier un commentaire.
Lorsque vous créez un tableau à l'aide de la suite littérale
Puisque le type des éléments sont différents, le tableau
aaa
type est créé avec java.io.SerializableAinsi, lorsque vous renvoyer le 2ème élément, le type de la référence sera de
Serializable
et il n'y a pas de taille de la propriété. Nous avons donc besoin de transtypage explicite/convertir le 2ème élément de Tableau à l'aide de asInstanceOf. Comme indiqué ci-dessousOriginalL'auteur rajuGT
Type le plus commun pour votre déclaration est sérialisable
Si vous voulez l'utiliser avec la taille, vous pouvez définir explicitement:
toutes les Chaînes doivent être convertis à des Séquences de Caractères dans ce cas.
OriginalL'auteur mavarazy
Comme mentionné dans les commentaires, ce n'est pas une bonne idée de mélanger les tableaux et les non-tableaux (et, en général, des éléments de types différents) dans un tableau. Parfois, il y a des cas particuliers, lorsque vous ne pouvez pas l'obtenir autour de les avoir à le faire, mais en règle générale, les tableaux (et d'autres scala conteneurs) sont destinés à tenir homogènes.
Donc, je vous recommande de commencer avec la division de votre tableau en deux:
Maintenant, vous pouvez facilement déterminer les longueurs de tous vos tableaux:
Si vous voulait conserver la position d'origine de l'information, vous pouvez compresser le tableau d'origine avec les index de la première:
arrays.foreach { println(_.size) }
ligne ne fonctionne pas. Parce que _ est toujours référence au type dejava.io.Serializable
etsize
n'est pas un membre de Serializable type. Pour info après l'exécution du premier blocarrays
reportez-vous àarrays:Array[java.io.Serializable] = Array(Array(1, 2, 3))
.J'ai essayé et ça n'a pas l'air de fonctionner, encore Serializable 🙁
OriginalL'auteur Dima