0

Mosel でいくつかのコードを再構築し、レコードのセットを使用して疎な多次元配列のインデックスを表現しようとしています。一連のレコードを動的に入力できるようにしたいので、ファイルまたはデータベースからの初期化を使用できません。

私は持っている:

declarations
    myTuple = record
        index1 : string
        index2 : string
    end-record
    sparseIndex : set of myTuple
end-declarations

そして、私は次のようなことをしたい:

forall (a in largeListOfStrings)
    forall (b in anotherListOfStrings)
        if (someCondition(a,b)) then
            sparseIndex += { new myTuple(a, b) }

しかし、モーゼルには「新しい」キーワードや演算子はなく、この点に関するドキュメントは非常に弱いように見えるので、レコードの新しいインスタンスを作成して初期化し、動的セットに追加できるようにする方法がわかりません。 .

または、これについて間違った方法で考えているだけかもしれません-疎インデックスのコンポーネントへのアクセスを保持する疎インデックスセットを作成するより良い方法はありますか?

4

1 に答える 1

1

この場合、レコードを定義する必要はありません。Mosel は、スパース配列の情報を保持するのに最適です。次のようにする必要があります。

declarations
    largeListOfStrings, anotherListOfStrings: set of string
    mylist: dynamic array(largeListOfStrings, anotherListOfStrings) of integer 
end-declarations

forall(a in largeListOfStrings, b in anotherListOfStrings | someCondition(a,b) = true) do
    mylist(a, b) := 1
end-do

したがって、これからは、疎行列は私のリスト内に保持されます。それを反復したいときはいつでも、次のようなロジックを使用する必要があります。

forall(a in largeListOfStrings, b in anotherListOfStrings | exists(mylist(a,b))) do
    ! Here you will iterate
end-do
于 2014-08-12T05:27:38.613 に答える