我从网络服务器获取一个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
答案 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