在下一次迭代中维护列表中的订单

时间:2016-04-27 10:37:56

标签: c# list

我从网络服务器获取一个List并传递这些数据,但是我试图保持传递项目的顺序。

例如,我得到一个名单列表

Name1
Name2
Name3

我为他们分配了一个ID

1. Name1
2. Name2
3. Name3

并进一步传递此列表。

在下一个电话中,我再次获得此列表,我需要知道我上次发送的顺序。现在的问题是,下次当我们得到这个列表时,它可以以任何顺序出现,即使它可以有重复,也可以说

Name2
Name3
Name4
Name2

所以我在这里我需要知道我上次分配给它的ID,所以它应该成为(为新项目分配新的ID)

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

依旧......

我想过有一个字典并第一次存储它,当我下次得到这个列表时,找到“Name”,得到那个ID并将它分配给Name,像这样的东西

  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

1 个答案:

答案 0 :(得分:0)

我已使用var increKey=Dictionary.Keys.Last(); 为您的答案更新了小提琴。请找到链接。如果你使用int作为键我们不能忽略序列,所以maximun key是很好的解决方案。希望它对你有帮助。

如果int键值是连续顺序,则可以使用

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

Last()方法用于查找键,您可以增加键值,如

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();
}

代码中的更改:

details

ADDED Answer in Fiddle