La plus succincte façon de déterminer si une variable est égale à une valeur à partir d'une "liste" des valeurs
-
09-06-2019 - |
Question
Si j'ai une variable en C# qui doit être vérifié afin de déterminer si elle est égale à celle d'un ensemble de variables, quelle est la meilleure façon de le faire?
Je ne suis pas à la recherche d'une solution qui stocke l'ensemble dans un tableau.Je suis plus curieux de voir si il y a une solution qui utilise la logique booléenne, d'une certaine façon à obtenir la réponse.
Je sais que je pourrais faire quelque chose comme ceci:
int baseCase = 5;
bool testResult = baseCase == 3 || baseCase == 7 || baseCase == 12 || baseCase == 5;
Je suis curieux de voir si je pouvais faire quelque chose de plus comme ceci:
int baseCase = 5;
bool testResult = baseCase == (3 | 7 | 12 | 5);
Évidemment, le ci-dessus ne fonctionne pas, mais je suis intéressé à voir si il y a quelque chose de plus succincte que mon premier exemple, ce qui a pour répéter la même variable pour chaque valeur de test.
Mise à JOUR:
J'ai décidé d'accepter CoreyN de répondre comme il semble que l'approche plus simple.C'est pratique, et toujours simple pour un novice à comprendre, je pense.
Malheureusement, où je travaille, notre système utilise les .NET framework 2.0 et il n'y a pas de possibilité de mise à niveau à tout moment bientôt.Existe-il d'autres solutions qui ne dépendent pas de la .NET framework 3.5, en plus de la plus évidente, que je pense:
new List<int>(new int[] { 3, 6, 7, 1 }).Contains(5);
La solution
bool b = new int[] { 3,7,12,5 }.Contains(5);
Autres conseils
Vous pouvez faire quelque chose de similaire avec .NET 2.0, en profitant du fait qu'un tableau de T implémente IList<T>et IList<T> a un Contient la méthode.Donc la suite est équivalente à Corey de l' .NET 3.5 solution, même si évidemment moins claire:
bool b = ((IList<int>)new int[] { 3, 7, 12, 5 }).Contains(5);
J'utilise souvent IList<T> pour le tableau des déclarations, ou au moins pour le passage de tableau à une dimension arguments.Cela signifie que vous pouvez utiliser IList propriétés telles que Compter, et passer d'un tableau à une liste facilement.E. g.
private readonly IList<int> someIntegers = new int[] { 1,2,3,4,5 };
Puisque vous n'avez pas spécifier de quel type de données en entrée, je vais supposer que vous pouvez partitionner votre entrée en puissances de 2 -> 2,4,8,16...Cela vous permettra d'utiliser les bits de déterminer si votre test de valeur est un des bits de l'entrée.
4 => 0000100
16 => 0010000
64 => 1000000
à l'aide de certains binaires math...
testList = 4 + 16 + 64 => 1010100
testValue = 16
verdict = testList & testValue