Disons que j'ai un tableau, j'ai besoin de stocker des valeurs de chaîne ainsi que des valeurs doubles. Je sais que je peux stocker les doubles comme des chaînes et je ne fais que gérer les conversions, mais est-il possible d'utiliser un tableau avec deux types de données? P>
4 Réponses :
Utilisation sûre:
object[], ArrayList, or List<Object>;
Que recommanderiez-vous pour une efficacité maximale? Je traite avec des tableaux de taille d'éléments 50K.
@SOO - Est-ce toujours des éléments de 50 000 et est-ce que chacun des éléments de 50 km est toujours rempli?
Je penserais que si vous avez besoin de redimensionner la matrice, que le tableau ou la liste
50k ... Les trois à peu près la même chose, en termes de stockage, mais honnêtement, je reviendrais probablement en utilisant un tableau du tout et essayez d'utiliser plusieurs structures plus petites.
La matrice est généralement la plus rapide, car elle n'a pas la longueur variable de l'arraylist et de la liste.
objet [] code> et
arraylist code> sont deux options décentes; Cela dépend de la question de savoir si vous avez besoin d'une matrice de longueur fixe traditionnelle ou d'un vecteur (réseau de longueur variable). En outre, je voudrais «envelopperiez» l'un d'entre eux dans une classe personnalisée qui a fait une vérification de type, si les chaînes et les doubles sont les seules choses que vous pouvez gérer et vous devez pouvoir les récupérer en tant que cordes et doubles. p>
Vous pouvez utiliser Une alternative consiste à créer une classe avec des types et un marqueur: objet [] code> et faire une vérification de type. Vous obtiendrez une boîte de boxe / une boîte de consigne lors de l'accès aux doubles, mais cela sera plus rapide que
double.parse () code> de toute façon.
class StringOrDouble
{
private double d;
private string s;
private bool isString;
StringOrDouble(double d)
{
this.d = d;
isString = false;
}
StringOrDouble(string s)
{
this.s = s;
isString = true;
}
double D
{
get
{
if (isString)
throw new InvalidOperationException("this is a string");
return d;
}
}
string S
{
get
{
if (!isString)
throw new InvalidOperationException("this is a double");
return s;
}
}
bool IsString { get { return isString; } }
}
^ Est-ce ce que vous décrivez ici une structure?
Pas l'utilisation la plus efficace, mais que diriez-vous de flexibilité: ou même p>
Combien de performances est importante? Si c'est le cas, j'aurais pu essayer d'écrire une classe personnalisée les stocker séparément, mais les expose comme une.
Comment détectez-vous s'il s'agit d'un double ou d'une chaîne que vous retirez. Sont-ils toujours dans le même ordre ou?