0
votes

Tableau SWIFT d'INTS - Trouvez l'index où la différence pour l'élément précédent est supérieure à 10

J'ai le tableau suivant:

let diffArray = zip(array.dropFirst(), array).map(-) 
let filteredArray = diffArray.filter {abs($0) > 10}


5 commentaires

Vous ne pouvez pas définir l'index de l'élément. Vous devez échanger deux éléments ou l'insérer à 0 index, mais d'autres seront déplacés vers la droite. S'il vous plaît expliquer ce que vous voulez faire.


OK, va éditer une question.


Donc, le premier numéro obtient simplement une passe gratuite?


Grande question. Pour le moment oui.


Qu'est-ce qui va arriver à ce tableau? [5, 14, 2]


5 Réponses :


2
votes

Cela devrait le faire. Rien de fantaisie cependant.

let array = [1,3,2,1,4,3,99,3,5,2,1,45]

func resetValues(withDifference difference: Int, in array: inout [Int]) {
    for index in array.indices.dropFirst() {
        if abs(array[index - 1] - array[index]) >= 10 {
            array[index] = 0
        }
    }
}

resetValues(withDifference: 10, in: &array)
print(array)


2 commentaires

Quel est le but de vérifier si index == 0 Si vous commencez par var index = 1 ? Plus simple serait pour index dans array.indices.dropfirst () . Notez également que votre ResetValues ​​(différence: 10, tableau: tableau) ne compile pas (mauvaises étiquettes d'argument, manquant & ).


@Martinr c'était un peu de code que j'ai oublié de supprimer quand j'ai changé la logique: x merci



0
votes

Ainsi, le premier élément reste comme ce qu'il est et les éléments suivants sont mappés. Si la différence avec l'élément de la matrice initiale avec l'index -1 est supérieure, 10, l'élément est "remplacé" par 0 xxx

... Si vous ne voulez pas compter avec des éléments remplacés, juste Supprimer les éléments de réglage de TEMP tableau xxx


Alternativement, par exemple si vous souhaitez simplement modifier votre tableau actuel, vous pouvez ajouter cette méthode. à l'extension du tableau de int xxx


1 commentaires

Je vais utiliser cette réponse car il offre deux options. La réponse de RAKESHA ci-dessous fonctionne également.



2
votes

Vous pouvez mapper em> le tableau tout en gardant une trace de l'élément précédent:

let a = [1,3,2,1,4,3,99,3,5,2,1,45]

var previous = a.first ?? 0
let b = a.map { elem -> Int in
    defer { previous = elem }
    return elem - previous > 10 ? 0 : elem
}

print(b)
// [1, 3, 2, 1, 4, 3, 0, 3, 5, 2, 1, 0]


0 commentaires

0
votes

L'algorithme est assez simple: boucle à travers tous les nombres à partir du second et remplace ceux qui sont plus grands d'une quantité de 10 que le précédent. Maintenant, avec les capacités de la matrice de Swift, cela peut être fait en une avec une seule fonction Call: xxx

une solution complexe quelque peu complexe, mais qui évite d'accéder à la matrice par index et peut donc être appliquée à Toute séquence / collection: xxx


0 commentaires

0
votes

Il semble y avoir une divergence entre votre déclaration d'exigence et votre exemple.

"Un élément, dont la différence pour l'élément précédent est supérieur à 10, est défini sur 0" devrait aboutir à: p> xxx pré>

mais votre exemple résultat est [1, 3,2,1,4,3,0,3,5,2,1,1,0] suggèrent que la différence est en fait avec la valeur "transformée" de l'élément précédent. P>

Donc, pour L'exigence indiquée, vous pouvez le faire comme ceci: p> xxx pré>

ou comme ceci: p> xxx pré>

qui produisent les deux: xxx pré>

mais, afin de correspondre à votre exemple de résultat (différence avec la valeur transformée précédente), vous devez le faire: P>

[1, 3, 2, 1, 4, 3, 0, 3, 5, 2, 1, 0]


1 commentaires

Merci de clarifier cela et de le rendre conscient. Vous avez tout à fait raison.