2016-04-27 6 views
0

ウェブサーバーからリストを取得してこのデータを渡していますが、アイテムを渡す順序を維持しようとしています。次の繰返しでリストの注文を維持する

例えば私が

1. Name1 
2. Name2 
3. Name3 

し、さらにこのリストを渡し、それらにIDを割り当てる名前

Name1 
Name2 
Name3 

の一覧を取得しています。

次回の呼び出しで、このリストをもう一度取得し、前回送信した順番を知る必要があります。さて問題は、次回、我々はこのリストを取得するときに、それも、それが重複して持つことができ、任意の順序で来ることができるが、

Name2 
Name3 
Name4 
Name2 

を言うことができますように、私はここで私は、私はそれに最後の時間を割り当てられたものをIDを知る必要がありさそれは私が見つけ、私はこのリストに次の時間を取得するときに、辞書を有し、かつ、それを最初に保存すると考える(新しいアイテムに新しいIDを割り当てる)

2. Name2 
3. Name3 
1. Name4 
4. Name2 

になるというように。..

必要がありますその "名前"は、そのIDを取得し、名前にそれを割り当てる、このような何か

var searchName = "Name1"; 
    var index = GetNameIndex(searchName); 
    if (index != 0) 
    { 
    nameIndex = index; 
    } 
    else 
    { 
    _namePositionDictionary.Add(++nameIndex, searchName); 
    } 


    int GetNameIndex(string searchName) 
    { 
    return (from a in _namePositionDictionary where a.Value == searchName select a.Key).FirstOrDefault(); 
    } 

しかし、私の全体のロジックは、私は私の最初のリストで重複

Name1 
Name2 
Name1 <-- This one didn't got added to the list at all 
+0

あなたの辞書は、辞書<文字列、文字列>が含まれ? – vinodh

+0

@vinodh、それは辞書ですが、私は必要に応じて任意のタイプに変更することができます。 –

+0

私は通常、ID、名前、および静的リストを持つカスタムクラスを作成します。リストをIDで簡単に並べ替えることができますので、私はいつも同じ注文をします。 – jdweng

答えて

0

を得たとき、私はDictionary<int,string>であなたの答えのためのフィドルを更新した、失敗しました。リンクを見つけてください。intをキーとして使用している場合は、シーケンスを無視できないので、maximunキーはthis.Hopeに役立ちます。

int型のキー値を使用して、キーを見つけるために使用

var increKey=Dictionary.Keys.Last(); 

最終()メソッドを使用することができますし、何がある場合は、あなたが

`MyDictionary.add(increKey++,"values");` 

のようにキーの値をインクリメントすることはできません順番がある場合キーのシーケンスは、キー値の最大値を見つけて辞書を更新しようとします。あなたのコード内

var maxValue=_namePositionDictionary.Keys.Max(); 
MyDictionary.add(maxValue++,"values"); 

変更:

var searchName = "Name1"; 
var index = GetNameIndex(searchName); 
if (index != 0) 
{ 
nameIndex = index; // if you want to add duplication data add else statements here 
} 
else 
{ 
    var maxValue=_namePositionDictionary.Keys.Max(); 
    Console.WriteLine("Max Key Value:"+maxValue); 
    //var last = _namePositionDictionary.Keys.Last(); If there is no sorted order 
    var val1=maxValue+1; 
    Console.WriteLine(val1); 
_namePositionDictionary.Add(val1, searchName); 

} 


int GetNameIndex(string searchName) 
{ 
return (from a in _namePositionDictionary where a.Value == searchName select a.Key).FirstOrDefault(); 
} 

ADDED Answer in Fiddle

関連する問題