Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

ListSame

2 つのリストを比較し、ブーリアン値を返します。

Synopsis

ListSame(list1,list2)

パラメータ

list1 有効なリストに評価する式。Caché list は、ListBuild、または ListFromString を使用して作成するか、List を使用して別のリストから抽出する必要があります。NULL 文字列 ("") も、有効なリストと見なされます。
list2 有効なリストに評価する式。Caché list は、ListBuild、または ListFromString を使用して作成するか、List を使用して別のリストから抽出する必要があります。NULL 文字列 ("") も、有効なリストと見なされます。

説明

ListSame は、2 つのリストの内容を比較し、リストが同一の場合、1 を返します。リストが同一でない場合、ListSame は 0 を返します。ListSame は、リスト要素をその文字列表現を使用して比較します。ListSame 比較では大文字と小文字が区別されます。

ListSame は 2 つのリストを要素ごとに左から右の順に比較します。したがって、ListSame は最初に同一でないリスト要素のペアを検出すると 0 を返し、それ以降の要素が有効なリスト要素かどうかを判別するためのチェックは行いません。ListSame 比較が無効な要素を検出した場合、<LIST> エラーが発行されます。

以下の例は、2 つのリストが同一であるため、1 を返します。

x = ListBuild("Red","Blue","Green")
y = ListBuild("Red","Blue","Green")
 PrintLn ListSame(x,y)

以下の例は、2 つのリストが同一でないため、0 を返します。

 x = ListBuild("Red","Blue","Yellow")
 y = ListBuild("Red","Yellow","Blue")
 PrintLn ListSame(x,y)

同一のリスト

ListSame は、2 つのリストで文字列表現が同一である場合に、2 つのリストを同一と見なします。

数値と文字列のリスト要素を比較する際、文字列リスト要素では、数値をキャノニック形式で表す必要があります。これは、Caché では常に、比較の実行前に、数値がキャノニック形式に変換されるためです。以下の例で、ListSame は文字列と数値を比較します。最初の 3 つの ListSame 関数は 1 (同一) を返します。4 つ目の ListSame 関数は 0 (同一でない) を返します。これは、文字列表現がキャノニック形式でないためです。

PrintLn ListSame(ListBuild("365"),ListBuild(365))
PrintLn ListSame(ListBuild("365"),ListBuild(365.0))
PrintLn ListSame(ListBuild("365.5"),ListBuild(365.5))
PrintLn ListSame(ListBuild("365.0"),ListBuild(365.0))

ListSame 比較は、その他のリスト演算子で使用されるのと同じ等価テストではありません。他の演算子では、リストの内部表現を使用してテストします。以下の例で示すように、1 つの数字と 1 つの数値文字列を比較するとき、この相違が容易にわかります。

 x = ListBuild("365")
 y = ListBuild(365)
   If x=y Then
      PrintLn "Equal sign: number/numeric string identical"
   Else
      PrintLn "Equal sign: number/numeric string differ"
   End If
   If 1=ListSame(x,y) Then
      PrintLn "ListSame: number/numeric string identical"
   Else
      PrintLn "ListSame: number/numeric string differ"
   End If 

等価 (=) 比較は、これらのリスト (同一ではない) の内部表現をテストします。ListSame は、両方のリストに対して文字列変換を実行し、これらを比較して、同一であると判断します。

以下の例は、数値要素のさまざまな表現を持つ 2 つのリストを示します。ListSame は、これら 2 つのリストを同一と見なします。

 x = ListBuild("360","361","362","363","364","365","366")
 y = ListBuild(00360.000,(19*19),+"362",363,364.0,+365,"3" & "66")
 PrintLn ListSame(x,y)," lists are identical"

NULL 文字列と NULL リスト

NULL 文字列 (空の文字列) を唯一の要素として含むリストは、有効なリストです。NULL 文字列自体も、有効なリストと見なされます。ただし、これら 2 つ (NULL 文字列と NULL リスト) は、以下の例で示すように、同一とは見なされません。

 PrintLn ListSame(ListBuild(""),ListBuild(""))," null lists"
 PrintLn ListSame("","")," null strings"
 PrintLn ListSame(ListBuild(""),"")," null list and null string"

通常、文字列は有効な ListSame 引数ではないので、ListSame は、<LIST> エラーを発行します。ただし、以下の ListSame 比較は正常に終了し、0 (値は同一ではない) を返します。NULL 文字列と文字列 “abc” が比較され、同一ではないことが判明します。これらの NULL 文字列の比較により、<LIST> エラーは発生しません。

 PrintLn ListSame("","abc")
 PrintLn ListSame("abc","")

以下の ListSame 比較により、<LIST> エラーが発生します。これは、リスト (NULL リストであっても) は文字列と比較できないためです。

 x = ListBuild("")
 PrintLn ListSame("abc",x)
 PrintLn ListSame(x,"abc")

“Empty” リストの比較

ListValid では以下のすべてを有効なリストと見なします。

PrintLn ListValid("")
PrintLn ListValid(ListBuild())
PrintLn ListValid(ListBuild(NULL))
PrintLn ListValid(ListBuild(""))
PrintLn ListValid(ListBuild(Chr(0)))
PrintLn ListValid(ListBuild(,))

ListSame では以下のペアのみを同一と見なします。

PrintLn ListSame(ListBuild(),ListBuild(NULL))
PrintLn ListSame(ListBuild(,),ListBuild(NULL,NULL))
PrintLn ListSame(ListBuild(,),ListBuild() & ListBuild())

空の要素

ListBuild は、要素間にコンマを追加するか、1 つ以上のコンマをいずれかの要素リストの末尾に追加することにより、空の要素を作成できます。ListSame は空の要素を認識し、これらを NULL 文字列要素と同等には扱いません。

以下の ListSame の例はすべて 0 (同一ではない) を返します。

PrintLn ListSame(ListBuild(365,,367),ListBuild(365,367))
PrintLn ListSame(ListBuild(365,366,),ListBuild(365,366))
PrintLn ListSame(ListBuild(365,366,,),ListBuild(365,366,))
PrintLn ListSame(ListBuild(365,,367),ListBuild(365,"",367)) 

入れ子のリストおよび連結されたリスト

ListSame では、入れ子になったリストに対するサポートはありません。コンテンツが同一であっても、リストを含む 2 つのリストを比較することはできません。

 x = ListBuild("365")
 y = ListBuild(365)
 PrintLn ListSame(x,y)," lists identical"
 PrintLn ListSame(ListBuild(x),ListBuild(y))," nested lists not identical"

以下の例で、これらのリストは同一と見なされないため、ListSame 比較はどちらも 0 を返します。

 x=ListBuild("Apple","Pear","Walnut","Pecan")
 y=ListBuild("Apple","Pear",ListBuild("Walnut","Pecan"))
 z=ListBuild("Apple","Pear","Walnut","Pecan","")
 PrintLn ListSame(x,y)," nested list"
 PrintLn ListSame(x,z)," null string is list item"

ListSame では、連結されたリストをサポートします。以下の例は、2 つのリストが同一と見なされるため、1 を返します。

 x=ListBuild("Apple","Pear","Walnut","Pecan")
 y=ListBuild("Apple","Pear") & ListBuild("Walnut","Pecan")
 PrintLn ListSame(x,y)," concatenated list"

関連項目

FeedbackOpens in a new tab