Pour une application Android, les fonctionnalités suivantes sont disponibles:
private ArrayList<String> _categories; // eg ["horses","camels"[,etc]]
private int getCategoryPos(String category) {
for(int i = 0; i < this._categories.size(); ++i) {
if(this._categories.get(i) == category) return i;
}
return -1;
}
Est-ce le "meilleur" moyen d'écrire une fonction pour obtenir la position d'un élément? Ou existe-t-il une fonction native sophistiquée de shmancy dans Java que je devrais utiliser?
ArrayList
a une méthode indexOf()
. Vérifiez l’API pour plus d’informations, mais voici comment cela fonctionne:
private ArrayList<String> _categories; // Initialize all this stuff
private int getCategoryPos(String category) {
return _categories.indexOf(category);
}
indexOf()
retournera exactement ce que votre méthode retourne, rapidement.
ArrayList<String> alphabetList = new ArrayList<String>();
alphabetList.add("A"); // 0 index
alphabetList.add("B"); // 1 index
alphabetList.add("C"); // 2 index
alphabetList.add("D"); // 3 index
alphabetList.add("E"); // 4 index
alphabetList.add("F"); // 5 index
alphabetList.add("G"); // 6 index
alphabetList.add("H"); // 7 index
alphabetList.add("I"); // 8 index
int position = -1;
position = alphabetList.indexOf("H");
if (position == -1) {
Log.e(TAG, "Object not found in List");
} else {
Log.i(TAG, "" + position);
}
Sortie: Index de la liste: 7
Si vous passez H il retournera 7, si vous passez J il retournera - 1 comme nous avons défini la valeur par défaut à -1.
Fait
Si votre List
est trié et dispose d'un bon accès aléatoire (comme ArrayList
, vous devriez vous pencher sur Collections.binarySearch
. Sinon, vous devez utiliser List.indexOf
, comme d'autres l'ont fait remarquer.
Mais votre algorithme est sain, fwiw (autre que le ==
que d'autres ont signalé).
Il existe en effet une fonction native sophistiquée de shmancy dans Java que vous devriez utiliser.
ArrayList a une méthode d'instance appelée
indexOf(Object o)
(http://docs.Oracle.com/javase/6/docs/api/Java/util/ArrayList.html)
Vous pourrez l'appeler sur _categories
comme suit:
_categories.indexOf("camels")
Je n'ai aucune expérience en programmation pour Android - mais cela fonctionnerait pour une application standard Java.
Bonne chance.
L'API Java spécifie deux méthodes que vous pouvez utiliser: indexOf(Object obj)
et lastIndexOf(Object obj)
. Le premier retourne l'index de l'élément s'il est trouvé, -1 sinon. Le second retourne le dernier index, ce serait comme chercher dans la liste à l'envers.