Difference between revisions of "LlListSortStrided/ja"

From Second Life Wiki
Jump to navigation Jump to search
m
m
 
Line 4: Line 4:
|func=llListSortStrided|return_type=list
|func=llListSortStrided|return_type=list
|func_complexity=O(N<sup>2</sup>)
|func_complexity=O(N<sup>2</sup>)
|p1_type=list|p1_name=src|p1_desc=List to be sorted.
|p1_type=list|p1_name=src|p1_desc=ソートするリスト。
|p2_type=integer|p2_name=stride
|p2_type=integer|p2_name=stride|p2_desc=ストライド内の要素数。
|p3_type=integer|p3_name=stride_index|p3_desc=The index within the stride to sort by. stride_index is 0-indexed. The first element is 0, second 1, etc. An index of 0 is functionally identical to using [[llListSort]].
|p3_type=integer|p3_name=stride_index|p3_desc=ソートに使用するストライド内のインデックス。stride_index は 0 から始まります。最初の要素は 0、2 番目は 1 などです。インデックス 0 は、[[llListSort]] を使用するのと機能的に同じです。
|p4_type=integer|p4_name=ascending|p4_desc=if [[TRUE]] then the sort order is ascending, otherwise the order is descending.
|p4_type=integer|p4_name=ascending|p4_desc=[[TRUE]] の場合、ソート順は昇順です。それ以外の場合、降順です。
|func_footnote
|func_footnote
|func_desc=llListSortStrided is llListSort with the added parameter of stride_index, adding the flexibility to sort by any item in the stride.  These routines use the same underlying code and have the same computational complexity.
|func_desc=llListSortStrided は、stride_index パラメータを追加した llListSort であり、どのストライド内のアイテムでもソートできる柔軟性があります。これらのルーチンは同じ基本コードを使用し、計算の複雑さも同じです。
|return_text=that is {{LSLP|src}} sorted by the {{LSLP|stride_index}} item in every {{LSLP|stride}}.
|return_text={{LSLP|src}} をすべての {{LSLP|stride}} ごとに {{LSLP|stride_index}} アイテムでソートしたリスト。
|spec=The sort order is affected by type. For strings and keys, it is case sensitive and sorts by Unicode character code.<br/>
|spec=ソート順は型に影響を受けます。文字列とキーの場合、大文字小文字を区別し、Unicode 文字コードでソートします。<br/>
<source lang="lsl2">llListSortStrided(["a", "á", "B", "C", "d", "e"], 1, 0 TRUE) // returns ["B", "C", "a", "d", "e", "á"]</source>
<source lang="lsl2">llListSortStrided(["a", "á", "B", "C", "d", "e"], 1, 0 TRUE) // returns ["B", "C", "a", "d", "e", "á"]</source>


Line 24: Line 24:




|caveats=*It uses the same unoptimized selection sort algorithm as llListSort, which is an algorithm with a Big O of N². A [[JIRA]] issue exists to improve this function, {{Jira|SVC-2988}}.
|caveats=* これは、llListSortと同じ最適化されていない選択ソートアルゴリズムを使用しています。このアルゴリズムのビッグOはN²です。この機能の改善のためにJIRAの問題が存在しています。{{Jira|SVC-2988}}
* Originally the wiki stated that non-zero values for the "ascending" parameter would produce an ascending sort.  That was incorrect.  For this function, the value must be exactly 1 (or TRUE) for an ascending sort.
 
* [[Vector]]s are sorted by magnitude. {{Jira|SVC-5643}}
* もともとWikiには、"ascending"パラメーターの非ゼロ値が昇順のソートを生成すると記述されていましたが、これは誤りでした。この機能では、"ascending"パラメーターの値は正確に1(またはTRUE)でなければなりません。
* [[Rotation]]s are not sorted in any meaningful order. If a list containing only rotations is sorted in ascending order, it will be returned unchanged.
 
* For descending sort, if there are mixed types, the final order is deterministic (the same input will always produce the same output) but it can be completely useless. <source lang="lsl2">llListSortStrided([2, "B", "C", 3, 1, "A"], 1, 0, FALSE) // returns ["A", 3, 1, "C", "B", 2]</source> If there are no mixed types, however, the descending sort works just fine.
* ベクトルは大きさでソートされます。{{Jira|SVC-5643}}
* When the stride is greater than 1, if the list length is not a multiple of the stride, the list will be returned unchanged.
 
* When strings contain numbers, the numbers are still sorted left-to-right like any other character, which may not necessarily match numeric order: <source lang="lsl2">llListSortStrided(["127", "3", "25"], 1, 0, TRUE) // returns ["127", "25", "3"] because the 1 in 127 is before the 2 in 25 which is before the 3</source> To sort them in numeric order, numbers in strings can be padded with zeros: <source lang="lsl2">llListSortStrided(["127", "003", "025"], 1, 0, TRUE) // returns ["003", "025", "127"]</source>
* ローテーションは意味のある順序でソートされません。ローテーションだけを含むリストが昇順でソートされると、変更されずに返されます。
** This order differs from the order of items in a prim's inventory, which is "natural order" (e.g "New Script 2" is sorted before "New Script 11").
 
* 降順ソートの場合、型が混在している場合、最終的な順序は確定的です(同じ入力は常に同じ出力を生成します)が、完全に役に立たないことがあります。 <source lang="lsl2">llListSortStrided([2, "B", "C", 3, 1, "A"], 1, 0, FALSE) // returns ["A", 3, 1, "C", "B", 2]</source> ただし、型が混在していない場合、降順ソートは正常に機能します。
 
* ストライドが1より大きい場合、リストの長さがストライドの倍数でない場合、リストは変更されずに返されます。
 
* 文字列に数字が含まれている場合、数字は他の文字と同様に左から右にソートされます。これは数値の順序と必ずしも一致しないかもしれません。 <source lang="lsl2">llListSortStrided(["127", "3", "25"], 1, 0, TRUE) // returns ["127", "25", "3"] because the 1 in 127 is before the 2 in 25 which is before the 3</source> これらを数値順にソートするには、文字列内の数字にゼロを詰めることができます。 <source lang="lsl2">llListSortStrided(["127", "003", "025"], 1, 0, TRUE) // returns ["003", "025", "127"]</source>
 
** この順序は、プリムのインベントリアイテムの順序とは異なります。プリムのインベントリの順序は「自然な順序」です(たとえば、「New Script 2」は「New Script 11」よりも前にソートされます)。
|constants
|constants
|examples=
|examples=
Line 57: Line 64:
</source>
</source>


llListSort and llListSortStrided really only works on items of the same type. It will work on lists that hold diverse data types -- to be clear, it won't blow up your script -- but the results returned are usually meaningless.
llListSort llListSortStrided は実際には同じ型のアイテムに対してのみ機能します。異なるデータ型を保持するリストでも動作しますが、はっきり言って、スクリプトがエラーになることはありませんが、通常、返される結果は意味がありません。


<source lang="lsl2">list mylist = ["brown", <0.000000, 0.000000, 0.000000>, "house", 17.005, 100, "cat", <3.000000, 3.000000, 3.000000>, 39];
<source lang="lsl2">list mylist = ["brown", <0.000000, 0.000000, 0.000000>, "house", 17.005, 100, "cat", <3.000000, 3.000000, 3.000000>, 39];
Line 78: Line 85:
===Utilizing the Results===
===Utilizing the Results===


It's important to note that the source list that you are sorting will remain unchanged. Instead, a new, sorted list will be produced. So, it's important that you capture this with a variable (unless you are acting directly on the results.)
重要なのは、ソートしているソースリストは変更されないということです。代わりに、新しい、ソートされたリストが生成されます。したがって、これを変数でキャプチャすることが重要です(結果に直接アクションを行っている場合を除く)。


<source lang="lsl2">llListSortStrided(myList, 1, 0, TRUE); // You've wasted cpu time; you didn't capture the results
<source lang="lsl2">llListSortStrided(myList, 1, 0, TRUE); // You've wasted cpu time; you didn't capture the results
Line 86: Line 93:
llSay(0,llList2CSV(llListSortStrided(myList, 1, 0, TRUE))); // No need to capture, using the results right away.</source>
llSay(0,llList2CSV(llListSortStrided(myList, 1, 0, TRUE))); // No need to capture, using the results right away.</source>


==={{LSLPT|Stride}} parameter===
==={{LSLPT|Stride}} パラメータ===


Most times, you will want to set "integer stride" to 1 (0 also works) to tell it to sort each item in the list on its own basis. (If you are working with a strided list, though, see the special section below on sorting strides.)
ほとんどの場合、"integer stride" を1に設定するか(0も動作します)、それによってリスト内の各アイテムをその独自の基準でソートするように指示したいでしょう。(ただし、ストライドリストを使用している場合は、ストライドのソートに関する下記の特別なセクションを参照してください。)


===Sort Order===
===ソート順序===


Setting the parameter "integer ascending" to [[TRUE]] returns a sorted list that is in ascending order. <br/>
パラメータ "integer ascending" [[TRUE]]に設定すると、昇順に並んだソートされたリストが返されます。<br/>
For example: ["Apples", "Bananas", "Oranges"]
: ["Apples", "Bananas", "Oranges"]


Setting the parameter "integer ascending" to [[FALSE]] returns a sorted list that is in descending order. <br/>
パラメータ "integer ascending" [[FALSE]]に設定すると、降順に並んだソートされたリストが返されます。<br/>
For example: ["Oranges", "Bananas", "Apples"]
: ["Oranges", "Bananas", "Apples"]


===Sorting Strided Lists===
===ストライドリストのソート===


If you have a [[List#Strided_lists|strided list]], in which you are keeping related pieces of data together in chunks, letting each list element sort on its own basis would be disastrous.
もし[[List#Strided_lists|ストライドリスト]]を持っていて、関連するデータをチャンクごとにまとめている場合、各リスト要素が独自の基準でソートされると災難です。


<source lang="lsl2">list demographics = ["John Adams", "male", "2007-06-22", "Shirley Bassey", "female", "2005-11-02", "Matt Damon", "male", "2008-05-19"];</source>
<source lang="lsl2">list demographics = ["John Adams", "male", "2007-06-22", "Shirley Bassey", "female", "2005-11-02", "Matt Damon", "male", "2008-05-19"];</source>
Line 108: Line 115:
<source lang="lsl2">list tmplist_1 = llListSortStrided(demographics, 1, 0, TRUE);
<source lang="lsl2">list tmplist_1 = llListSortStrided(demographics, 1, 0, TRUE);
//tmplist_1 == ["2005-11-02", "2007-06-22", "2008-05-19", "John Adams", "Matt Damon", "Shirley Bassey", "female", "male", "male"]
//tmplist_1 == ["2005-11-02", "2007-06-22", "2008-05-19", "John Adams", "Matt Damon", "Shirley Bassey", "female", "male", "male"]
//The strides have been destroyed, the sorted data is now useless</source>
//ストライドが破壊され、ソートされたデータはもはや有用ではありません。


====Good Example====
====Good Example====

Latest revision as of 12:39, 22 November 2023

要約

関数: list llListSortStrided( list src, integer stride, integer stride_index, integer ascending );

llListSortStrided は、stride_index パラメータを追加した llListSort であり、どのストライド内のアイテムでもソートできる柔軟性があります。これらのルーチンは同じ基本コードを使用し、計算の複雑さも同じです。
src をすべての stride ごとに stride_index アイテムでソートしたリスト。を list で返します。

• list src ソートするリスト。
• integer stride number of entries per stride, if less than 1 it is assumed to be 1ストライド内の要素数。
• integer stride_index ソートに使用するストライド内のインデックス。stride_index は 0 から始まります。最初の要素は 0、2 番目は 1 などです。インデックス 0 は、llListSort を使用するのと機能的に同じです。
• integer ascending TRUE の場合、ソート順は昇順です。それ以外の場合、降順です。

This function supports Strided Lists.

仕様

ソート順は型に影響を受けます。文字列とキーの場合、大文字小文字を区別し、Unicode 文字コードでソートします。

llListSortStrided(["a", "á", "B", "C", "d", "e"], 1, 0 TRUE) // returns ["B", "C", "a", "d", "e", "á"]

For ascending sort, each type is sorted individually and then feathered to have the same order of types.

llListSortStrided([1, "C", 3, "A", 2, "B"], 1, 0, TRUE) // returns [1, "A", 2, "B", 3, "C"]

llListSortStrided([1, 3, 2, "C", "A", "B"], 1, 0, TRUE) // returns [1, 2, 3, "A", "B", "C"]

llListSortStrided([1, "C", 3, "A", 2, "B"], 2, 0, TRUE) // returns [1, "C", 2, "B", 3, "A"]

llListSortStrided([1, "C", 3, "A", 2, "B"], 2, 1, TRUE) // returns [3, "A", 2, "B", 1, "C"]

警告

  • これは、llListSortと同じ最適化されていない選択ソートアルゴリズムを使用しています。このアルゴリズムのビッグOはN²です。この機能の改善のためにJIRAの問題が存在しています。SVC-2988
  • もともとWikiには、"ascending"パラメーターの非ゼロ値が昇順のソートを生成すると記述されていましたが、これは誤りでした。この機能では、"ascending"パラメーターの値は正確に1(またはTRUE)でなければなりません。
  • ベクトルは大きさでソートされます。SVC-5643
  • ローテーションは意味のある順序でソートされません。ローテーションだけを含むリストが昇順でソートされると、変更されずに返されます。
  • 降順ソートの場合、型が混在している場合、最終的な順序は確定的です(同じ入力は常に同じ出力を生成します)が、完全に役に立たないことがあります。
    llListSortStrided([2, "B", "C", 3, 1, "A"], 1, 0, FALSE) // returns ["A", 3, 1, "C", "B", 2]
    
    ただし、型が混在していない場合、降順ソートは正常に機能します。
  • ストライドが1より大きい場合、リストの長さがストライドの倍数でない場合、リストは変更されずに返されます。
  • 文字列に数字が含まれている場合、数字は他の文字と同様に左から右にソートされます。これは数値の順序と必ずしも一致しないかもしれません。
    llListSortStrided(["127", "3", "25"], 1, 0, TRUE) // returns ["127", "25", "3"] because the 1 in 127 is before the 2 in 25 which is before the 3
    
    これらを数値順にソートするには、文字列内の数字にゼロを詰めることができます。
    llListSortStrided(["127", "003", "025"], 1, 0, TRUE) // returns ["003", "025", "127"]
    
    • この順序は、プリムのインベントリアイテムの順序とは異なります。プリムのインベントリの順序は「自然な順序」です(たとえば、「New Script 2」は「New Script 11」よりも前にソートされます)。

サンプル

list score_board = ["Awesome", "Resident", 200, "Star", "Marxman", 999, "Happy2", "Survive", 1];
default
{
    state_entry()
    {
        llOwnerSay("Unsorted: " + llDumpList2String(score_board, ","));
        score_board = llListSortStrided(scoreboard, 3, 0, TRUE);
        llOwnerSay("Sort by first names: " + llDumpList2String(numbers, ","));
        // Object: Sort by first names: Awesome,Resident,200,Happy2,Survive,1,Star,Marxman,999

        score_board = llListSortStrided(scoreboard, 3, 1, TRUE);
        llOwnerSay("Sort by last names: " + llDumpList2String(numbers, ","));
        // Object: Sort by first names: Star,Marxman,999,Awesome,Resident,200,Happy2,Survive,1

        score_board = llListSortStrided(scoreboard, 3, 2, TRUE);
        llOwnerSay("Sort by last names: " + llDumpList2String(numbers, ","));
        // Object: Sort by first names: ,Happy2,Survive,1,Awesome,Resident,200,Star,Marxman,999

    }
}

llListSort と llListSortStrided は実際には同じ型のアイテムに対してのみ機能します。異なるデータ型を保持するリストでも動作しますが、はっきり言って、スクリプトがエラーになることはありませんが、通常、返される結果は意味がありません。

list mylist = ["brown", <0.000000, 0.000000, 0.000000>, "house", 17.005, 100, "cat", <3.000000, 3.000000, 3.000000>, 39];
list tmplist = llListSortStrided(mylist, 1, 0, TRUE);
llSay(0, llList2CSV(tmplist));

This returns in chat:

brown, <0.000000, 0.000000, 0.000000>, cat, 17.004999, 39, house, <3.000000, 3.000000, 3.000000>, 100

The same ordered in descending order returns even more meaningless results:

list mylist = ["brown", <0.000000, 0.000000, 0.000000>, "house", 17.005, 100, "cat", <3.000000, 3.000000, 3.000000>, 39];
list tmplist = llListSortStrided(mylist, 1, 0, FALSE);
llSay(0, llList2CSV(tmplist));

returns in chat:

39, <3.000000, 3.000000, 3.000000>, cat, 100, 17.004999, house, <0.000000, 0.000000, 0.000000>, brown

Utilizing the Results

重要なのは、ソートしているソースリストは変更されないということです。代わりに、新しい、ソートされたリストが生成されます。したがって、これを変数でキャプチャすることが重要です(結果に直接アクションを行っている場合を除く)。

llListSortStrided(myList, 1, 0, TRUE); // You've wasted cpu time; you didn't capture the results

list newlist = llListSortStrided(myList, 1, 0, TRUE);// Okay. You've captured the results.

llSay(0,llList2CSV(llListSortStrided(myList, 1, 0, TRUE))); // No need to capture, using the results right away.

Stride パラメータ

ほとんどの場合、"integer stride" を1に設定するか(0も動作します)、それによってリスト内の各アイテムをその独自の基準でソートするように指示したいでしょう。(ただし、ストライドリストを使用している場合は、ストライドのソートに関する下記の特別なセクションを参照してください。)

ソート順序

パラメータ "integer ascending" をTRUEに設定すると、昇順に並んだソートされたリストが返されます。
例: ["Apples", "Bananas", "Oranges"]

パラメータ "integer ascending" をFALSEに設定すると、降順に並んだソートされたリストが返されます。
例: ["Oranges", "Bananas", "Apples"]

ストライドリストのソート

もしストライドリストを持っていて、関連するデータをチャンクごとにまとめている場合、各リスト要素が独自の基準でソートされると災難です。

list demographics = ["John Adams", "male", "2007-06-22", "Shirley Bassey", "female", "2005-11-02", "Matt Damon", "male", "2008-05-19"];

Bad Example

list tmplist_1 = llListSortStrided(demographics, 1, 0, TRUE);
//tmplist_1 == ["2005-11-02", "2007-06-22", "2008-05-19", "John Adams", "Matt Damon", "Shirley Bassey", "female", "male", "male"]
//ストライドが破壊され、ソートされたデータはもはや有用ではありません。

====Good Example====

Instead, because you have the data grouped (aka "strided") in sets of 3, you need to do this:

<source lang="lsl2">list tmplist_2 = llListSortStrided(demographics, 3, 0, TRUE);
//templist_2 = ["John Adams", "male", "2007-06-22", "Matt Damon", "male", "2008-05-19", "Shirley Bassey", "female", "2005-11-02"]

特記事項

All Issues

~ Search JIRA for related Issues
   Convert llListSort() to use faster sorting methods!
   llSortedListFindList() - improved llListFindList() for known to be sorted lists

Signature

function list llListSortStrided( list src, integer stride, integer stride_index, integer ascending );
この翻訳は 原文 と比べて古いですか?間違いがありますか?読みにくいですか?みんなで 修正 していきましょう! (手順はこちら)
この項目はあなたにとって参考にならない項目ですか?もしかしたらLSL Wikiの関連した項目が参考になるかもしれません。