我的类(Item)的Object数组如下,
class Item
{
int id;
int value;
bool isSelected;
}
Item itemArr[] = new Item [MAXCOUNT];
要检索所选的项ID并存储到列表中,我使用下面的代码
List<int> listOfItems = new List<int>();
listOfItems.AddRange(itemArr.Where(p => (p.IsSelected)
.Select(p => p.ID)).ToArray());
我还有一个词典,表示项目ID为键,项目值为值,
Dictionary<int,int> itemidValueMap = new Dictionary<int,int>();
如何获取项目ID和值对并将其存储到此字典中?
这个问题不重复。我只需要选择满足条件的元素并将它们只存储在字典中。但之前的问题是关于将所有元素添加到字典中。
答案 0 :(得分:2)
要构建字典,请使用ToDictionary
:
var dictionary = itemArr.Where(p => p.IsSelected)
.ToDictionary(key => key.id, value => value.value);
如果您有相同的id
几次会导致异常(密钥不是唯一的),请使用ToLookup
或先GroupBy
然后{{1} }。
ToDictionary
作为旁注,您可以更好地填充ID列表:
var lookup = itemArr.Where(p => p.IsSelected)
.ToLookup(key => key.id, value => value.value);
var dictionary = itemArr.Where(p => p.IsSelected)
.GroupBy(i => i.id)
.ToDictionary(key => key.Key, value => value.Select(i => i.value));
答案 1 :(得分:2)
要获取所选ID,您的查询应如下所示:
List<int> selectedIDs = itemArr.Where(item => item.IsSelected).Select(item => item.id).ToList();
请注意,结果是List<int>
,而不是List<Item>
。
要获取字典,请尝试:
var idToValue = itemArr.ToDictionary(item => item.id, item => item.value);
仅当您的ID 唯一时才有效。如果不是,您需要对它们进行分组,但我不知道您希望如何汇总具有相同ID的项目的值。
如果您只想为所选项目添加该词典,只需再次插入Where
子句:
var idToValue = itemArr.Where(item => item.IsSelected).ToDictionary(item => item.id, item => item.value);
答案 2 :(得分:1)
您需要更改此
listOfItems.AddRange(itemArr.Where
(p => (p.IsSelected).Select(p => p.ID)).ToArray());
到
listOfItems.AddRange(itemArr.Where
(p => p.IsSelected).ToArray());
然后
Dictionary<int,int> itemidValueMap = listOfItems.ToDictionary(item => item.id,
item => item.value)