-1
votes

Comment supprimer chaque n article dans la liste jusqu'à la liste de la liste de cible?

Il y a une liste de courts. Les valeurs n'a pas d'importance, comme: xxx

Ce code doit redire la liste de résultats compter en supprimant chaque nième élément de celui-ci.

Exemple 1: xxx

résultat doit être {1,3,5,7,9} et résultat.Compte devrait être == 5

exemple 2: < Pré> xxx

résultat doit être {1,4,7} et résultat.Count devrait être == 3

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: xxx

et le resault.Count dans cet exemple est égal à 41, mais devrait être == TargeItemScount == 42;

HO Do i Supprimer chaque élément N dans la liste jusqu'à ce que list.Comptez plus de la valeur cible avec C #?


7 commentaires

Pourquoi 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 ? 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 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 est 1.1 Vous supprimerez chaque deuxième élément à chaque fois - mais vous ne devez jamais comptabiliser que le rédominindex n'est pas 2 mais seulement 0,1 plus grand que 1 .


@Randrandom Il semble que vous avez raison. Je ne peux pas comprendre le meilleur algorithme pour cela.


3 Réponses :


1
votes

Si ma compréhension est correcte: xxx

résultat:

entrée = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Résultat calculé = [1, 3, 5, 7, 9]

entrée = [1, 2, 3, 4, 5, 6, 7, 8, 9]
Résultat calculé = [1, 4, 7]


0 commentaires

0
votes

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();


0 commentaires

0
votes

Pour vous garantir, vous obtenez le nombre attendu d'éléments sélectionnés: xxx

Notez que dans le cas suivant xxx

Le résultat sera [1, 2, 4, 5, 7, 8] , c'est-à-dire l'arrondissement de l'index vers le bas lorsque cela est nécessaire

En outre, vous devez ajouter une validation ( TargetItemScount> 0 , cibleItemscount ...)

Lien vers Fiddle


7 commentaires

Comment osez-vous mettre . à 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é - c'est juste un non-aller et je ne voterai jamais une personne qui le fait. rage ;)


@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 . 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.