我正在下面的字典:
Dictionary<string, List<Coordinates>> Coordinates = new Dictionary<string,List<Coordinates>>();
public class Coordinates
{
public int Id { get; set; }
public decimal range { get; set; }
//other properties
}
现在我正在尝试为我的字典添加坐标以获取特定的区域ID,如果相同的坐标ID出现,那么我不想添加它。
以下是我的网络服务方法:
public string MyMethod(string coordinateId, string regionId)
{
var coordinates = Coordinates.Where(ed => (ed.Key == regionId)).SelectMany(ed => ed.Value).ToList();
var coordinatesExist = coordinates.Any(ed => ed.Id.ToString() == id);
if (!Coordinates.ContainsKey(regionId) && !coordinatesExist)
{
//here i want to add it but as it is list of my class i dont know how to add it
Coordinates.Add(regionId, ?????);
}
else
{
return "This coordinate id already exist for this region id";
}
}
我检查了以下链接,但这些答案是使用字符串列表或数组但不包含类列表:
c# dictionary How to add multiple values for single key?
How to add values to Dictionary with a list of dictionaries inside
示例数据:
Region Id = 100
Coordinate Id = 10,20,30
Region Id = 200
Coordinate Id = 10,20,30
答案 0 :(得分:1)
假设您的班级名称为Coordinate
,而您的词典为Coordinates
基本上:
Coordinates.Add(
new List<Coordinate>()
{
new Coordinate()
{
Id = coordinateId
}
}
); //You can remove all the whitespaace
问题是这样的(由于您的代码检查字典中是否已存在密钥列表),您的列表中始终只有1个条目。
那么为什么不改变Dictionary<string, Coordinates>
?
以json的名义:
this is what you do:
{ "key" : [Coordinate] }
why not?
{ "key" : Coordinate }
Or are you trying to achieve?
{ "key" : [Coordinate, Coordinate, Coordinate] }
所以你这样做,想要晚些时候:{ "key" : [Coordinate, Coordinate, Coordinate] }
。
每个词典条目中都有一个List。如果字典是键和值的列表,则在1维中说字典中的列表是2维数组。
事情就在这里。您需要分两步进行分解:
public string MyMethod(string coordinateId, string regionId)
{
if (!Coordinates.ContainsKey(regionId))
{
oordinates.Add(regionId, new Coordinate() {Id = regionId});
}
else
{
//Get the list of coordinates out of the dictionary for its region
var list = Coordinates[regionId];
if(list.Any(cor=> cor.Id == coordinateId))
{ //Check if any of the coordinates have the same Id
return "This coordinate id already exist for this region id";
} else
{ //Otherwise we add it to the list.
lists.Add(new Coordinate() { Id = regionId})
}
}
return "added";
}
答案 1 :(得分:1)
使用正确的数据结构Dictionary<string, HashSet<Coordinates>>
。 Coordinates
{{1}}方法,用于比较ID。
这样你就可以Add the Equals
and GetHashCode
只有在它不存在的情况下才会被添加。
答案 2 :(得分:0)
尝试这样的事情:
Coordinates.Add(regionId, new List<Coordinates> { new Coordinates { Id = id, Range = ??? } });
答案 3 :(得分:0)
我认为你正在寻找这个:
Coordinates.Add(regionId, new List<Coordinates>()
{
new Coordinates(){Id=1,range=10},
new Coordinates(){Id=2,range=110},
new Coordinates(){Id=3,range=1140}
});
如果你想初始化这样的dictonary意味着你可以这样做:
Dictionary<string, List<Coordinates>> Coordinates = new Dictionary<string, List<Coordinates>>()
{
{"ID1", new List<Coordinates>()
{
new Coordinates(){Id=1,range=10},
new Coordinates(){Id=2,range=110},
new Coordinates(){Id=3,range=1140}
}
},
{"ID2", new List<Coordinates>()
{
new Coordinates(){Id=1,range=10},
new Coordinates(){Id=2,range=110},
new Coordinates(){Id=3,range=1140}
}
}
};