Il y a une liste de courts. Les valeurs n'a pas d'importance, comme: Ce code doit redire la liste de résultats compter en supprimant chaque nième élément de celui-ci. P> Exemple 1: P > résultat doit être {1,3,5,7,9} et résultat.Compte devrait être == 5 p> exemple 2: p> < Pré> xxx pré> résultat doit être {1,4,7} et résultat.Count devrait être == 3 p> mais il devrait arrêter de le retirer, quelque part pour faire le nombre de résultats égaux TargetItemscount (42 dans ce code, mais sa valeur ailleurs n'a pas d'importance).
Le code est: p> et le resault.Count dans cet exemple est égal à 41, mais devrait être == TargeItemScount == 42; P> HO Do i Supprimer chaque élément N dans la liste jusqu'à ce que list.Comptez plus de la valeur cible avec C #? P> P>
3 Réponses :
Si ma compréhension est correcte: résultat: p> entrée = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] entrée = [1, 2, 3, 4, 5, 6, 7, 8, 9]
Résultat calculé = [1, 3, 5, 7, 9] P>
Résultat calculé = [1, 4, 7] P>
blockQuote> p>
Essayez:
var resultTemp = Enumerable.Range(1, 9).ToList();
var targetItemsCount = 3;
var roundingError = resultTemp.Count % targetItemsCount;
var reduceIndex = (resultTemp.Count - roundingError) / targetItemsCount;
List<int> result;
if (reduceIndex <= 1)
result = resultTemp.Take(targetItemsCount).ToList();
else
result = resultTemp.Where((a, index) => index % reduceIndex == 0).Take(targetItemsCount).ToList();
Pour vous garantir, vous obtenez le nombre attendu d'éléments sélectionnés: Notez que dans le cas suivant p> Le résultat sera En outre, vous devez ajouter une validation ( Lien vers Fiddle P> P> [1, 2, 4, 5, 7, 8] code>, c'est-à-dire l'arrondissement de l'index vers le bas lorsque cela est nécessaire P> TargetItemScount> 0 code>, cibleItemscount
Comment osez-vous mettre . Code> à la fin de la ligne au lieu du début de la nouvelle ligne suivante.
@Randrandom si sue moi
Comme votre solution et qu'il corrige un problème, la mine a, mais ce égaré code> - c'est juste un non-aller et je ne voterai jamais une personne qui le fait. rage i>;)
@Randrandom Vérifiez le violon avec votre solution DotNetFiddle.net/HQUTHQ La solution de VS 74 s'améliore sur {1,2 , 3,4,5,6,7,8,9} et cibleItemscount = 5. Sa sortie 1 2 4 6 8 8 et le vôtre obtient 1 2 3 4 5. Cela ne signifie pas, votre mauvais ou ne fonctionne pas, Cela fonctionne, mais VC 74 un peu mieux.
@MR_BLOND - C'est l'erreur dont je parle dans mon commentaire - je recommande totalement sa solution sur le mien, prenez-la mais ne copiez pas son mauvais emplacement de . Code> Oubliez que vous avez déjà eu à voir que
@Randrandom ok))))
@ VC74 WOW, je viens de remarquer que cette solution fonctionne bien même pour augmenter le nombre d'articles! Il fabrique 1 1 2 2 3 4 4 5 5 6 7 7 8 8 9 9 pour 15. Oui, ce n'est pas le thème de la question du Current, mais j'avais besoin d'une méthode croissante aussi.
Pourquoi B> voulez-vous faire cela? Lorsque vous avez débuté, pourquoi cela s'est-il passé à 41 au lieu de 42?
Donc, n est le
cibleTemscount code>? Au lieu de donner 3 entrées possibles et une sortie respective pourriez-vous expliquer l'algo, l'étape de la peur de la première?Et si TargeTemScount i> est plus grand que le nombre d'éléments dans la liste des sources?
@XDTTTRANSFORM Il y a 2 algs je devrais combiner 1) Je devrais supprimer les éléments de la liste dans le cas où la liste de résultats comporte plus d'une manière d'une manière ou d'une autre. 2) Je peux le faire en supprimant uniquement les premiers ou les derniers éléments, mais ce sera un résultat plus lisse lorsque je supprimai chaque nième élément.
@schlonzo Il devrait ne rien retirer, "si" sera sauté.
Je crois que vous avez une erreur de fouille dans votre logique - par exemple. Votre
RetainInDex code> est1.1 code> Vous supprimerez chaque deuxième élément à chaque fois - mais vous ne devez jamais comptabiliser que lerédominindex code> n'est pas2 Code> mais seulement0,1 code> plus grand que1 code>.@Randrandom Il semble que vous avez raison. Je ne peux pas comprendre le meilleur algorithme pour cela.