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.

The withoutLeadingArticle function

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.

The withoutLeadingArticle function code

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
end withoutLeadingArticle

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
end letterGrade

If a list of movies has the movie rating as the last item of each line, you can sort the movies by their ratings using this statement:

sort lines of tMovies by letterGrade(last item of each)

Keywords used in this example

0 Comments

Add your comment

E-Mail me when someone replies to this comment