2009-12-04 4 views
3

Cela semble si trivial mais je ne trouve pas de réponse avec Google.C# plus haute chaîne

Je suis après une valeur élevée pour une chaîne pour un sémaphore à la fin d'une liste triée de chaînes.

Il me semble que char.highest.ToString() devrait le faire - mais cela compare faible, pas élevé.

De toute évidence, il n'est pas vraiment possible de créer une chaîne la plus élevée possible car elle sera toujours inférieure à la même chose + plus de données mais les chaînes que je trie sont toutes des chemins valides.

En réponse aux commentaires:

Dans les jours pré-unicode dans Delphi je simplement ai utilisé # 255. Je veux simplement une chaîne qui se comparera plus haut que n'importe quel chemin possible. Cela devrait être trivial - pourquoi n'est-ce pas?

Réponse # 2:

Ce n'est pas le tri qui exige la sentinelle, il est le traitement par la suite. J'ai plusieurs listes que je suis en train de fusionner (une fusion simpliste ne fera pas l'affaire.) Et soit je duplique du code, soit j'ai des valeurs factices qui se comparent toujours haut.

+1

Pourriez-vous donner un exemple? –

+3

Que voulez-vous dire par chaîne la plus élevée? Pouvez-vous donner des exemples? – Tinister

+0

Pourquoi avez-vous besoin de cela? Peut-être que si vous nous dites pourquoi votre algorithme de tri a besoin d'une sentinelle (qui est le bon nom pour ce genre de chose), peut-être que quelqu'un vous donnera une meilleure façon de le faire. –

Répondre

4

Une représentation sous forme de chaîne du caractère le plus élevé ne comportera qu'un seul caractère. Pourquoi ne pas simplement l'ajouter en tant que sémaphore après le tri, plutôt que d'essayer de faire quelque chose qui va trier après?

Vous pouvez également spécifier votre propre comparateur qui trie votre jeton après toute autre chaîne et appelle le comparateur par défaut dans le cas contraire.

+2

Le comparateur personnalisé est probablement la façon la moins hacky de le faire. Faites-lui dire que certains jetons sont plus grands que toutes les autres chaînes (sauf elle-même). –

0

Quelque chose comme ça?

public static String Highest(this String value) 
{ 
    Char highest = '\0'; 
    foreach (Char c in value) 
    { 
     highest = Math.Max(c, highest); 
    } 
    return new String(new Char[] { highest }); 
} 
+1

Le vôtre pourrait échouer. Entrée: "zz". Vos sorties "z" qui trie plus bas. –

2

J'ai eu le même problème en essayant de mettre les valeurs nulles en bas d'une liste dans une déclaration LINQ OrderBy(). J'ai fini par utiliser ...

Char.ConvertFromUtf32(0x10ffff) 

... qui a travaillé un régal.

+0

Cela semble fonctionner. Je vais essayer. –

Questions connexes