Question

Je ne sais pas comment gérer nils ma fonction de tri obtient.

Quand j'ai cette vérification en elle, les accidents de table.sort après quelques appels.

if a == nil then
    return false
elseif b == nil then
    return true
end

Avec cette erreur: la fonction de commande non valide pour le tri . Mais d'après la documentation, la fonction tri doit retourner faux, si un va après b. Vrai autrement.

Si je supprime supprimer ce code, il d'accidents de cours de nils d'indexation.

Était-ce utile?

La solution

Cela a peu ou rien à voir avec les valeurs de nil dans le tableau. Le message d'erreur est généré si la fonction de comparaison elle-même est invalide. De la documentation table.sort :

  

Si comp est donnée, alors il doit être   fonction qui reçoit deux tables   les éléments, et revient vrai lorsque le   la première est inférieure à la seconde (de sorte que   not comp(a[i+1],a[i]) sera vrai   après le tri).

En d'autres termes, comp(a,b) doit impliquer not comp(b,a). Si cette relation ne tient pas, alors l'erreur « fonction de commande non valide pour le tri » sera probablement élevé. (Notez qu'il ne peut pas être soulevée dans tous les cas.)

Pour être plus utile, nous avons vraiment besoin de voir toute la fonction passée à table.sort.

Autres conseils

Pour mettre toutes les valeurs nulles au début du tableau:

  function mycomp(a,b)
    if a == nil and b == nil then
      return false
    end
    if a == nil then
      return true
    end
    if b == nil then
      return false
    end
    return a < b
  end

Pour mettre toutes les valeurs nulles à la fin du tableau:

function mycomp(a,b)
  if a == nil and b == nil then
    return false
  end
  if a == nil then
    return false
  end
  if b == nil then
    return true
  end
  return a < b
end
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top