4

ハッシュの内容がわからないハッシュがあるとしましょう(したがって、これには pick を使用できません)。ハッシュの例を次に示します。

{ "key1" : "value1", "key2" : "value2", "key3" : "value3" }

このハッシュを反復処理して、次の配列を作成します。

["key1=value1", "key2=value2", "key3=value3"]

私の最初のアプローチは、ハッシュを反復処理して配列にデータを入力する再帰関数を作成することですが、それができるかどうかはわかりません。配列では、head() と tail() を使用して再帰を支援できますが、これらの演算子は (私の知る限り) ハッシュには使用できません。

モジュールでこれを行っているため、関数内からこれを開始したいと思います。例えば:

hash_to_array = function(h) {
  // magic code here
}

manipulate_params = function(params) {
  params_array = hash_to_array(params);
  // more code here...

}
4

3 に答える 3

3

マイク、インパクトの後、時間を割いてハッシュ用の keys() 演算子を構築します。

それまでの間、これを回避するために私が行ったことは、キーの別の配列を保持することです。そうすれば、マップ、フィルター、およびすべてのセット操作をインデックスで使用し、それらの値をハッシュ操作のキーとして使用できます。

key_array = ["key1","key2","key3"];
my_hash = { "key1" : "value1", "key2" : "value2", "key3" : "value3" };

これは、ハッシュの値を制御している場合にのみ機能しますが、コード例を次に示します。

global {
    kvHash = { "key1" : "value1", "key2" : "value2", "key3" : "value3" };
    kArray = ["key1","key2","key3"];
  }

pre {
        pickKey = kArray[1];
        value = kvHash.pick("$.#{pickKey}");
        // add a new value
        newKey = "key4";
        newVal = "value4";
        newArray = kArray.union(newKey);
        newHash = kvHash.put([newKey],newVal);
}

set operator unionを使用して、配列を一意の値でいっぱいにしていることに気付きました

生成される JavaScript は、これが何をするかを示しています。

var pickKey = 'key2';
var value = 'value2';
var newKey = 'key4';
var newVal = 'value4';
var newArray = ['key1', 'key2', 'key3', 'key4'];
var newHash = {'key2' :'value2','key1' :'value1','key4' :'value4','key3' :'value3'};

これで、マップ演算子またはフィルター演算子を使用して、各値を個別に関数に渡すことができます

c.map(function(x){x+2})

c.filter(function(x){x<5})
于 2011-03-19T23:11:01.890 に答える
2

私はこれを理解したと信じていますが、答えは少しハックです。

hash_to_sorted_array = function(params, names, new_a) {
  n = names.head();
  val = params.pick("$.#{n}", true);
  appended_array = new_a.append("#{n}=#{val.head()}");      
  finished_array = (names.length() == 0) => new_a |
                   hash_to_sorted_array(params, names.tail(), appended_array);      
  finished_array.sort()
}

この再帰関数は、ハッシュ内のキーを含む名前配列を反復処理し、各反復で処理するキーを削除します。

この関数を呼び出すには、次のように呼び出します。

sorted_array = hash_to_sorted_array(params, names, []);

配列の head() および tail() メソッドに慣れていない人のために: head() は配列の最初の要素を提供し、tail() は最初の要素が削除された新しい配列を提供します。

ハッシュの名前またはキーを引数の1つとして関数に渡す必要があるため、このソリューションはあまり好きではありません。これを書いている時点では、ハッシュからキーだけを抽出する方法を知りません。または、それを使用するだけです。

于 2011-03-19T22:15:51.113 に答える
2

私はこれを提案します:

foreach my_hash setting(key, value)
pre {
  my_array.push("#{key}=#{value}");
}

http://docs.kynetx.com/docs/Selectを参照してください

于 2011-03-19T15:44:00.687 に答える