0

次の「マップ」変数があります。

permutation[100]=-2;
permutation[3]=-1;
permutation[19]=0;
permutation[-20]=1;

すべての値を列挙する方法はありますか? 列挙順は気にしません。私は次のようなことを意味します(コードが機能していません):

Do[i+=3,{i,permutation}]

C++ から着想を得た変数を「マップ」するように伝えます。より良い検索結果を見つけるための正しい名前は何ですか?

4

2 に答える 2

1

あなたがしたことは、基本的に離散値の関数を定義することです。値のリストを保持している場合は、次のことができます。

permutation[100] = -2;
permutation[3] = -1;
permutation[19] = 0;
permutation[-20] = 1;
vals = {100, 3, 19, -20}

次のように使用します。

f /@ permutation /@ vals  -> {f[-2], f[-1], f[0], f[1]}

またはループで..

Do[ Print[permutation[vals[[i]]]], {i, Length[vals]}]

そもそもデータを定義するためのより良い方法がおそらくあります..

これは時々役立つトリックです(ただし、正の引数に対してのみ機能します)

permutation = SparseArray[{}, {200}, Null]
permutation[[100]] = -2;
permutation[[3]] = -1;
permutation[[19]] = 0;
f /@ Select[ permutation, ! (TrueQ[# == Null]) &]

out: {f[-1], f[0], f[-2]}

ただし、最も簡単なのは、順列をリストにすることです。

permutation={}
AppendTo[permutation,{100,2}]
AppendTo[permutation,{3,-1}]

それからする

 f[#[[2]]]& /@ permutation -> {f[2],f[-1]}
于 2013-04-11T20:45:43.747 に答える