我有一个从用户选择中填充的UI。我的字典的关键字只是一个简单的字符串,但它可能对应多个字符串条目(List)。
如果用户做出不同的选择,我应该能够浏览这个字典,并且对于相同的字符串键,检查用户刚刚在我的列表中做出的选择中的字符串是否已经存在,以及它确实,而不是添加。如果它不存在,则添加到现有列表中。
我从以下代码开始:
CommandLineComponent
其中commands
是包含进入字典键的条目的列表视图,var checkedItems = listViewColumns.CheckedItems;
if (checkedItems != null)
{
foreach (ListViewItem item in checkedItems)
{
if ((m_ColumnAssociations.ContainsKey(item.Text))
{
var correspondingMatrices = m_ColumnAssociations.Where(kvp =>
kvp.Value.Contains(dgvMatrices.SelectedCells[0].Value.ToString())).
Select(kvp => kvp.Key);
}
}
}
是我的字典。我在其他地方添加条目到我的代码,所以这部分是排序的。我的问题是关于这里正在进行的检查。
在我目前的尝试中,我只想尝试获取一个值(listViewColumns
)但是这个语句会返回一个IEnumerable。任何帮助将不胜感激。
答案 0 :(得分:1)
如果我理解你的问题,你需要以下内容:
var checkedItems = listViewColumns.CheckedItems;
if (checkedItems != null)
{
foreach (ListViewItem item in checkedItems)
{
List<string> itemsForAdding = // some items that needs to be added
// check if dictionary has the key
if (m_ColumnAssociations.ContainsKey(item.Text))
{
var listFromDictionary = m_ColumnAssociations[item.Text];
foreach(var itemForAdding in itemsForAdding)
{
if(!listFromDictionary.Contains(itemForAdding)
{
listFromDictionary.Add(itemForAdding);
}
}
}
}
}
或者您可以使用Distinct
方法:
...
List<string> itemsForAdding = // some items that needs to be added
// check if dictionary has the key
if (m_ColumnAssociations.ContainsKey(item.Text))
{
var listFromDictionary = m_ColumnAssociations[item.Text];
// add the whole list
listFromDictionary.AddRange(itemsForAdding);
// remove the duplicates from the list and save it back to dictionary
m_ColumnAssociations[item.Text] = listFromDictionary.Distinct();
}
...
希望它会有所帮助