2 votes

Comment déterminer si tous les éléments d'une liste sont identiques ?

Je travaille actuellement sur une calculatrice AppleScript qui extrapole des séquences linéaires arithmétiques (cela semble sophistiqué mais ça ne l'est pas vraiment). L'un des processus à effectuer est de trouver la différence commune entre chaque élément. En introduisant cette différence ( d ) dans l'équation de progression arithmétique ainsi que le terme que vous souhaitez connaître ( n ) permettra de prédire la n e terme dans n'importe quelle séquence.

Pour déterminer la différence commune, vous devez d'abord trouver la différence locale entre chaque paire de nombres de la séquence. Ensuite, comparez chaque différence ; si elles sont toutes identiques, la séquence est linéaire et la différence commune est égale à la différence locale. Dans le cas contraire, la suite est non linéaire et il n'y a pas de différence commune. J'ai trouvé comment trouver les différences locales de chaque nombre, mais la dernière semble être un plus grand défi. Le code que j'ai créé pour déterminer les différences locales produit une liste de nombres. Mon processus théorique consisterait à comparer le premier élément à tous les autres, et si chaque comparaison est vraie, à définir la différence commune comme étant la même que la différence locale. Voici comment je trouve la différence locale d'une liste de nombres :

set sequence to {1, 2, 3, 4, 4}
set x to 0
set dif_check to {}
repeat ((number of items of sequence) - 1) times
   set x to (x + 1)
   set selected_item to (item x of sequence)
   set local_dif to ((item (x + 1) of sequence) - selected_item)
   set dif_check to dif_check & {local_dif}
end repeat
return dif_check
--> result: {1, 1, 1, 0}
(* Since every item in the resulting list isn't equal, it would be nonlinear and the common difference would just be n/a. *)

Comment déterminer si tous les éléments d'une liste sont identiques ? J'ai essayé à plusieurs reprises, notamment avec ce script que j'ai expérimenté, mais je me suis rendu compte que cela ne me rapprochait pas de la solution :

set dif_check to {1, 1, 1, 0}
set first_term to (first item of dif_check)
set x to 1
set common_dif_check to {}
repeat ((number of items of dif_check) - 1) times
   set x to (x + 1)
   (item x of dif_check) = first_term
   set common_dif_check to common_dif_check & {result}
end repeat
return common_dif_check
--> result: {true, true, false}
(* This takes the first item of the list and compares it with every item after, returning a true or false and adding the result to another list. I thought this would have solved it, but instead just turns out as the same situation as before. *)

Comment puis-je déterminer si tous les éléments d'une liste sont identiques ? Toute aide à ce sujet serait grandement appréciée. Merci d'avance.

2voto

wch1zpink Points 6067

Je ne sais pas si cela peut vous aider, mais le code suivant permet de supprimer les doublons d'une liste et de créer une nouvelle liste à partir des résultats. Il comptera ensuite les éléments de la nouvelle liste et si le nombre d'éléments de cette nouvelle liste est supérieur à 1 cela signifie que tous les éléments de la liste d'origine n'étaient pas les mêmes.

property difCheck : {1, 1, 1, 0}
property allItemsAreTheSame : missing value

set itemCount to count of removeDuplicates(difCheck)

if itemCount is greater than 1 then
    set allItemsAreTheSame to false
else
    set allItemsAreTheSame to true
end if

on removeDuplicates(theList)
    script k
        property |List| : theList
        property tmpList : {}
    end script
    repeat with itemRef in k's |List|
        set theItem to itemRef's contents
        if k's tmpList does not contain theItem then ¬
            set k's tmpList's end to theItem
    end repeat
    return k's tmpList
end removeDuplicates

0voto

MG_ Points 109

Seules quelques modifications sont nécessaires.

set dif_check to {1, 1, 1, 0}
set first_term to (first item of dif_check)
set x to 1
set terms_are_same to true
repeat ((number of items of dif_check) - 1) times
    set x to (x + 1)
    if ((item x of dif_check) != first_term) then
        set terms_are_same to false
    end if
end repeat
return terms_are_same

L'astuce consiste à utiliser une variable qui est définie comme vraie à moins que l'une des comparaisons n'échoue.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X