2017-12-17 7 views
0

値を取り込み、辞書の値を見つけて削除し、辞書を通ってその後1以下の値のキーなので、(辞書の値のキーは1とアップからint型の値です)のように:辞書から項目を削除して他の人のキーを変更する方法F#

let deleteitem (item: Gitem) = 
    let mutable count = 1 
    while count<=invendict.Count do 
     let testitem = invendict.Item[count] 
     if item = testitem then 
      invendict.Remove[count] 
     //from here, look at every value, whos key is higher than the key of 
     the removed value, and decreases the key by one, till every value is looked at 
+1

1)辞書にはどのようなデータ構造が使用されていますか? 2)あなたのキーが単なるインデックスであれば、 'ResizeArray'を使うことはもっと意味があります。 –

+0

辞書は(Int、Gitem) –

+3

'System.Collections.Generic.Dictionary 'ですか?あなたはそれらを減らす必要があるように、キーは何を表していますか? –

答えて

3

コードスニペットに基づいてあなたの例では、それはであなたの鍵のように見えますディクショナリへのインデックスだけです(コードサンプルのループが1からinvendict.Countまで繰り返されるため)。この場合、辞書を使うのは悪い考えです。 ResizeArray(.NET汎用可変部List<T>タイプのF#タイプエイリアス)を使用することができます。 ResizeArrayから項目を削除する

はあなたが必要とする正確に動作しています

let r = ResizeArray ["A";"B";"C"] 
r.RemoveAt(1) // Remove the B element 
r.[0]   // Returns A as before removal 
r.[1]   // Returns C which was at 2 before the removal 

あなたが本当に辞書を使用する場合は、あなたは基本的に新しい辞書を作成する必要があります - おそらく再作成する方が効率的になります辞書の要素の半分を削除して追加するよりも

関連する問題