J'ai un Je dois remplir la liste Si la valeur de n est 2, la liste si 10 puis p> si 30 puis p> si 1000 puis p> Je ne sais pas comment faire cela. p> aidez-moi à bien faire cela en utilisant n'importe quelle méthode utilisant myList code> avec
n code> valeurs. p>
myList code> contiendra p>
linq code> ou
Lambda Expression code> p> p> P>
6 Réponses :
Ceci est similaire à Cette question (mais pas assez pour marquer C'est en tant que duplicaté, et c'est un problème difficile à rechercher de toute façon).
Utilisez l'une des réponses IEnumerable
CODE> (ou au moins, qui couvrent la plage dont vous avez besoin), Et puis si vous devez créer une liste avec un certain nombre d'éléments, utilisez simplement: p>
Ce n'est pas vraiment une réponse à la question imo.
C'est un problème facile à rechercher si vous reconnaissez que c'est ce que Excel fait - Essayez de rechercher "Excel colonne CHAR" ou similaire. :-)
@Stefan: De quelle manière est-ce pas une réponse à la question? Ajoutez une réponse de l'autre question, ajoutez la ligne supplémentaire et vous avez terminé. Qu'est-ce qui ne va pas avec ça, précisément?
@Jon: La question concerne la génération de chaînes d'une certaine manière. Vous répondez est davantage sur l'utilisation de la prise lorsque vous avez déjà résolu le problème.
Stefan: Je suis en désaccord. Si vous suivez le lien de Jon, vous verrez plusieurs réponses à la question de la manière de générer les chaînes d'une certaine manière. La seule partie manquante est le .take (). Tolist () Code> que JON a ajouté ici.
@ Gabe / jon. Ok désolé, je n'ai pas lu les réponses sur la question liée auparavant. Les réponses sont vraiment très similaires.
Ce code fonctionne bien, mais je ne sais pas si c'est "linq assez".
Il passe directement de "AZ" directement à "ABC" et de "ABZ" à "ABCD".
@Danny Chen: Maintenant, cela fonctionne, mais ce n'est pas très efficace ... cela crée un demi-million de cordes pour que ces milliers de ...
@Guffa: Je suis d'accord avec vous :( Ce problème est apporté par SelectMany code>, qui génère des caractères continus dans le lot. Mais je pense que si N n'est pas si grand, c'est une bonne idée parce que le code est une bonne idée parce que le code est plus lisible et facile à gérer.
@Guffa: J'ajoute un prenez code> méthode avant
SelectMany code>, il est maintenant plus effacieux. Merci pour vos conseils.
@Danny Chen: Vous créez maintenant toujours une collection qui n'est jamais utilisée avant de quitter la boucle. Pourquoi ne pas commencer par générateur = nouvelle liste
@Guffa: vous génie! Appuyez sur le clou sur la tête :) Mais si je commence par Générateur code> vide, comment puis-je générer la liste à
addrange code> avec
SelectMany code>? Il semble que la logique de la première boucle soit différente avec les prochaines boucles.
@Danny Chen: "" + ch = ch, alors {""} .Celectmany (...) = validaux. :)
J'ai fait Quelque chose de similaire dans SQL A En retour.
traduit en c # Il s'agit d'une fonction pour créer un code à partir d'un numéro: p> alors vous obtenez des numéros de 1 et plus et traduisez des codes : p> La limite de la fonction est actuellement "Zzzzzz" ou 321272406. (Après cela, vous obtenez une division à zéro.) p> Notez que cette La fonction utilise toutes les combinaisons et renvoie "A" .. "Z", "AA" .. "ZZ", "AAA" ... "ZZZ" plutôt que de commencer à "AB" et "ABC". P> < / p>
@dannynychen c'est ça. Votre code avec un peu de modifications ..
char[] validChars = Enumerable.Range(0, 26).Select(i => (char)('A' + i)).ToArray(); int n = 30; int pointer = 0; int pointerSec = 0; int Deg = 0; string prefix = string.Empty; string prefixMore = string.Empty; List<string> result = new List<string>(); while (n > 0) { result.AddRange(validChars.Skip(pointer).Select(ch => prefix + ch).Take(n)); if (pointer == 26) { pointer = -1; Deg += 1; prefixMore = "" + validChars[pointerSec]; pointerSec++; n++; } else { if (Deg == 0) { prefix = "" + validChars[pointer]; } else { prefix = prefixMore + validChars[pointer]; } } n--; pointer++; }
@Pramodh ... Est-ce ce que tu veux ..!
Essayez le ci-dessous .. J'utilise Croix Join Join Strong> et A Union Strong> pour construire la source, puis filtrer l'enregistrement en utilisant la méthode J'espère que cela vous donnera une idée d'utiliser une combinaison de la méthode LINQ, Lambda et Extension. P> P>
EDIT 2 STRUT>: C'est probablement le moyen le plus simple de la mettre en œuvre fort>. Je l'ai testé, ça marche bien. Vous pouvez générer un nombre infini de chaînes. P> public void IEnumerale<string> GenerateStrings()
{
int index = 0;
// generate "infinit" number of values ...
while (true)
{
// ignoring index == int.MaxValue
yield return GetString(index++);
}
}
List<string> strings = GenerateStrings().Take(1000).ToList();
Nice approche, bien que int i suffixecounter = 0; code> ne compile pas, et que vous n'utilisez pas
i code> ni
suffixeCounter code>.
Avez-vous besoin d'un CSV? Vous pouvez utiliser un StringBuilder et appendez n valeurs au lieu d'utiliser une liste. Ou voulez-vous convertir une liste existante de chaînes en CSV?
@Pavanred: Je ne pense pas que les CSV soient nécessaires ici - juste une liste de chaînes.
Stackoverflow.com/questions/314466/...
Pourquoi "AB" ... "AZ" et "ABC" ...? Quel est le problème avec "AA" et "AAA"?
@Pramodh: vous avez manqué "za" .. "zz" :)
@Pramodh: Jetez un coup d'œil à mon "Edit 2". J'ai trouvé une solution assez facile.
Dupe: Stackoverflow. com / questions / 297213 / ... Stackoverflow.com/questions/181596/... Stackoverflow.com/Questtions/2522720/... < / a> Stackoverflow.com/Questtions/837155/... etc.
@Ken: Ce ne sont pas 100% de duplicats. Ce n'est pas la même chose si vous tournez un numéro dans une chaîne ou si vous créez une séquence continue de chaînes. Si vous regardez ma réponse, cela ne dépend pas de la rotation des chiffres en chaînes.
Je pense que la réponse la plus élégante à ce type de question serait une sorte d'algorithme récursif