28 votes

Rosetta Stone - Tri des tableaux

J'ai pensé poser une question que je décris comme une "pierre de Rosette". En d'autres termes, je pose une question et j'aimerais que des réponses soient données pour un certain nombre de langues différentes afin que quelqu'un qui passe d'une langue à l'autre puisse voir comment certaines opérations typiques sont effectuées. J'ai toujours trouvé que ces types de comparaisons étaient très éducatifs lorsqu'on passe à une nouvelle langue, et qu'il s'agissait d'un moyen rapide et amusant de voir les différences entre les langues sans avoir à les utiliser intensivement pendant un certain temps.

Cette question particulière est la suivante : étant donné un ensemble d'éléments dans la collection typique appropriée à la langue en question, comment les trier ? Un exemple de code accompagné d'une description serait bienvenu.

Je vais présenter la réponse en Objective C :

// Can only modify mutable arrays
NSMutableArray *sortArray = [NSMutableArray arrayWithArray:myArrayOfStuff];

Trier NSString ignorer cas :

[sortArray sortUsingSelector: @selector(caseInsensitiveCompare:)];

Trie la plupart des objets de base (fonctionnerait également pour NSString), en supposant que les nombres sont enveloppés dans la classe NSNumber :

[sortArray sortUsingSelector:@selector(compare:)];

Trier les instances de vos propres classes :

[sortArray sortUsingSelector:@selector(myCompare:)];

Pour le dernier point, dans votre classe, vous implémentez une méthode de comparaison comme suit :

// Class instance method to compare self with object "obj"
- (NSComparisonResult) myCompare:(myObject *)obj
{
    NSComparisonResult retVal = NSOrderedSame;
    if ( self < obj ) // by whatever rules make sense for your class of course
      retVal = NSOrderedAscending;
    else if ( self > obj ) 
      retVal = NSOrderedDescending;
    return retVal;
}

18voto

J.F. Sebastian Points 102961

Il existe de nombreux sites qui ont été créés à cette fin. http://rosettacode.org

Triage à l'aide d'un comparateur personnalisé . Il existe des exemples en Ada, C, C++, Clean, Common Lisp, D, E, Haskell, J, Java, JavaScript, MAXScript, OCaml, Perl, PHP, Pop11, Python, Ruby, Smalltalk.

Il contient du code en 109 langues .

7voto

Mike Stone Points 21293

Ruby :

list = ["some", "list", "to", "sort"]

list.sort!                    # Sorts using default <=> method
list.sort! { |x, y| x <=> y } # custom block to sort any way you want
list.sort_by { |k| k.downcase } # sort using Schwartzian Transform
list.sort_by(&:downcase)        # sort using Schwartzian Transform (shortcut)

4voto

Jeremy Banks Points 32470

Python :

Il y a un Comment faire/Tri dans le wiki Python où vous pouvez apprendre tout cela.

# These all apply to the standard list type
myList = ["One", "Two", "Three", "Four"]

# To sort a list in-place
myList.sort()

# To get a sorted copy of a list
sortedList = sorted(myList)

# To sort using keys derived from the items
# For example, case-insensitive sorting
myList.sort(key=str.lower)

sortedList = sorted(myList, key=str.lower)

# You can also use comparison functions, which return:
#   a negative number if the first term comes second
#                zero if the terms sort equlivilently
#   a positive number if the first term comes first
# You specify the function like this:
myList.sort(comparisonFunction)

sortedList = sorted(myList, comparisionFunction)

# They can also accept the reversed parameter,
# which, as you'd expect, reverses the sorted order.
myList.sort(lambda a, b: cmp(a.name, b.name), reverse=True)
sortedList = sorted(myList, lambda a, b: cmp(a.name, b.name), reverse=True)

# If you've defined comparison methods for your class,
# the sorting method and function will work without any
# additional work required.

El Les méthodes de comparaison sont expliquées dans le manuel ils sont évidemment très simples.

4voto

Jeremy Ruten Points 59989

PHP :

sort($array); // Normal sort
asort($array); // Sort and don't change the indices of the values
ksort($array); // Sort by key rather than value
rsort($array); // Sort in reverse order
usort($array, 'cmp'); // Sort using user-defined comparison function
natsort($array); // Sort an array in "natural order" (eg. 1, 2, 10, 20
                 // instead of 1, 10, 2, 20)

// Comparison function used by usort()
function cmp($a, $b) {
    if ($a == $b) {
        return 0;
    } else if ($a < $b) {
        return -1;
    } else {
        return 1;
    }
}

3voto

jjnguy Points 62123

Java :

// Simple arrays
int[] numbers;
Arrays.sort(numbers);

// Still pretty simple Lists
List<E> list;
Collections.sort(list);
Collections.sort(list, yourComparator<E>);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X