[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

(DTPtechNote:677) Re: listのシャッフル



>この場合だと、some itemを使うアルゴリズムじゃないんですよね。
some item of はこんな感じにすれば使えますよね。
で、random numberより僅かに速いです。
2000項目くらいないとthe ticksでも、誤差かな? と思う程度
の差しかわかりませんが……。
その程度の差の為に回りくどくなるsome item of を使うほどの
メリットはなさそうだ。
といったところのようです。

to list_shuffle_some(my_list)
	copy my_list to tmp_list
	
	set si to {}
	repeat with j from 1 to count my_list
		set end of si to j
	end repeat
	
	repeat with i from 2 to length of tmp_list
		set rand_num to (some item of items 1 thru i of si)
		set temp_item to item i of tmp_list
		set item i of tmp_list to item rand_num of tmp_list
		set item rand_num of tmp_list to temp_item
	end repeat
	if my_list is tmp_list then --偶然変化がなかった
		my list_Shuffle(my_list)
	else
		return tmp_list
	end if
	
end list_shuffle_some