# Sorting a list

LiveCode provides a sort command for sorting the items of a container (variable, field etc). This lessons shows how to use the sort command in conjunction with a custom function which disregards leading "The","A" and "An" from the sort.

This custom function is called with a statement such as the following:

``sort lines of field "Titles" by withoutLeadingArticle(each)``

The custom function works in tandem with the sort container command. When you sort the lines of a container, the each keyword serves as a placeholder for each line in the container. In the above statement, each line is passed to the withoutLeadingArticle function, and the returned value is used as the sort key for that line. The withoutLeadingArticle function simply removes any leading articles (the words "A", "An", and "The"), leaving the rest of the title to be used as the sort key.

Using a custom function with the each keyword makes the sort container command much more flexible, because you can use the custom function to create any custom sort criteria you want to use. You can eliminate certain parts of the lines being sorted from consideration, as we've done here. Or you can use another custom function to transform lines in other ways.

For example, you could write a custom function for international sorting, which would change accented characters like é or ü into their ASCII equivalents (e and u). A sort done with this custom function would sort accented characters as though they were the unaccented equivalents, instead of sorting all accented characters after the end of the unaccented alphabet.

``````function withoutLeadingArticle pText
get word 1 of pText
if it is "The" or it is "An" or it is "A" then
## we don't want to use it for the sort
delete word 1 of pText
end if
return pText

## Other examples

Many other such special-purpose sorting functions can be written. Here's another example, which transforms a wordy movie rating into a letter so the movies can be easily sorted by rating, from best to worst:

``````function letterGrade pRating
switch pRating
case "See early, see often!"
return "A"
break
case "Worth the ticket price"
return "B"
break
case "Wait for the video release"
return "C"
break
case "Skip it."
return "D"
break
case "Flee! Flee for your lives!"
return "E"
break
end switch
``sort lines of tMovies by letterGrade(last item of each)``