AppleScript: Sortera en lista?

Tråden skapades och har fått 4 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • International user
  • 2005-03-11 18:33

Hur sorterar man listan {9, 3, 5, 10, 7}, så att resultatet blir {3, 5, 7, 9, 10}

set listan to {9, 3, 5, 6, 7}

--Sortera
<kod>

the result > {3, 5, 7, 9, 10}
  • Medlem
  • International user
  • 2005-03-11 20:11

Hittade ett script (ASCII-sort) på http://www.apple.com/applescript/guidebook/sbrt/pgs/sbrt.05.htm som jag ändrade lite i. Det verkar fungera:

set listan to {9, 3, 5, 6, 7}
my Integer_Sort(listan)

on Integer_Sort(my_list)
	set the index_list to {}
	set the sorted_list to {}
	repeat (the number of items in my_list) times
		set the low_item to ""
		repeat with i from 1 to (number of items in my_list)
			if i is not in the index_list then
				set this_item to item i of my_list as integer
				if the low_item is "" then
					set the low_item to this_item
					set the low_item_index to i
				else if this_item < low_item then
					set the low_item to this_item
					set the low_item_index to i
				end if
			end if
		end repeat
		set the end of sorted_list to the low_item
		set the end of the index_list to the low_item_index
	end repeat
	return the sorted_list
end Integer_Sort

Det t.o.m rundar av en float som sorteras korrekt.

En variant:

set this_list to {9, 3, 5, 10, 7}

on sort(l)
	if length of l = 1 then return l
	set x to item 1 of l
	set ll to rest of l
	set l1 to {}
	set l2 to {}
	repeat with i in ll
		if x < i then
			set l2 to l2 & i
		else
			set l1 to l1 & i
		end if
	end repeat
	if length of l1 > 1 then set l1 to sort(l1)
	if length of l2 > 1 then set l2 to sort(l2)
	return l1 & x & l2
end sort

set sorted_list to (sort(this_list))

return sorted_list
  • Medlem
  • International user
  • 2005-03-11 21:39

Problemet med din och min kod är att ingen (jag) fattar den egentligen utan analys. Har sett båda varianter på nätet, men ingen kommenterad...

Den variant jag hade kommer från någon mailinglista. Hittade iallafall han som skrev ihop den. (Emmanuel Levy).

1
Bevaka tråden