-2
votes

Comment obtenir uniquement les chiffres d'un tableau à chaîne?

J'ai un tableau de chaînes ( éléments code>) qui contiennent des chiffres et des mots - je tire cela à partir d'un dictionnaire ( correspondant code>) qui a int code> et chaîne code> en elle. Je veux obtenir un tableau ou quelque chose que je peux faire boucle à travers cela contient simplement les chiffres, triés numériquement, puis montrez-les dans la console.

Je peux le faire assez facilement pour des chaînes individuelles en utilisant Regex, mais quand j'ai une matrimonie de cordes je ne sais pas comment le faire. p>

Code ci-dessous, voir Commentaires: P>

Number is 1
Number is 5
Number is 2


7 commentaires

Lorsque vous pouvez le faire pour une seule chaîne, vous pouvez également pour les tableaux en itérant le tableau et en le faisant par élément.


Y a-t-il une méthode intégrée pour le faire, plutôt que d'avoir à continuer de boucler tout le temps? Cela semble être une opération assez triviale qui devrait être faite dans quelques lignes de code, imo


qui contiennent des chiffres et des mots afin qui que ce soit le numéro dans 1 et 2 ? 1 ou 2 ou 12 ?


@Liam Numbers se trouvent dans la valeur value1 , value5 et value2 cordes


"Cela semble être une opération assez acharnée qui devrait être faite dans quelques lignes de code, IMO" d'accord, alors écrivez une méthode ce qui vous fait pour vous. Il n'y a pas de place intégrée d'appliquer une regex sur une série d'éléments.


@HIMBROMBEERE C'est ce que j'essaie de faire :) Vous avez déjà été coincé sur quelque chose et avait besoin d'un peu d'aide?


Pourquoi cela a-t-il été évolué? Je ne me soucie pas vraiment mais je suis curieux.


3 Réponses :


4
votes

Vous pouvez le faire en utilisant LINQ. L'expression est plutôt déclarative et auto-expliquant: xxx


3 commentaires

C'est génial, sauf cela ne semble que montrer le premier numéro (1). Pour vérifier, j'ai imprimé correspondant.values ​​ à la console et les trois numéros étaient là. Des idées?


@SyntaxError, ce code fonctionne, Vérifiez ici . Soit vous avez copié cela pas complètement, soit peut-être que vous avez changé quelque chose.


Ah, je mets console.readkey (); au mauvais endroit. Fonctionne maintenant :) Merci!



0
votes

le faire avec Liste code> au lieu d'une matrice fera les choses plus faciles!

var matches = new Dictionary<int, string>();
matches.Add(1, "value1");
matches.Add(2, "value5");
matches.Add(3, "value2");

var items = matches.Values.ToList();
items.Sort( StringComparer.CurrentCulture);
Regex rgx = new Regex(@"\D");
var numbers = items.Select(i => int.Parse(rgx.Replace(i, "")));

foreach (int c in numbers)
{
    Console.WriteLine(string.Format($"Number is {c}"));
}


2 commentaires

À l'aide d'une liste au lieu d'une matrice ne fait aucune différence ici, car OP n'apporte pas d'éléments une fois la collection créée. Donc, une liste ne fournit aucun avantage dans ce cas. En fait, vous pouvez appeler sélectionner sur les deux.


vous avez raison, cela fait .Pluseach () avec je suis d'abord envisagé et ensuite laissé de côté



0
votes

Voici un exemple utilisant REGEX:

            string[] input = { "Number is 1", "Number is 5", "Number is 2" };
            string pattern = @"\d+";

            int[] results = input.Select(x => Regex.Match(x, pattern)).Cast<Match>().Select(x => int.Parse(x.Value)).ToArray();


0 commentaires