我有字典 Dictionary<int, List<string>> taskList = new Dictionary<int, List<string>>();
這給了我這樣的結果:
Task ID: 1664003 Values:
"2"
"5"
"1"
"4"
"3"
Task ID: 1664004 Values:
"1"
"2"
"3"
"5"
"4"
Task ID: 1664005 Values:
"1"
"2"
"5"
"4"
"3"
現在我想搜索對值的零索引的鍵,如下所示:
Values: "2" Task Id: 1664003
Value: "1" Task Id: 1664004, 1664005
我想使用 lambda 運算式來實作它
uj5u.com熱心網友回復:
對于這種搜索,您的字典是錯誤的方式。考慮創建一個正確的字典,然后多次搜索
var d = new Dictionary<int, List<string>>()
{
{ 1664003, new List<string>() {"2","5","1","4","3"}},
{ 1664004, new List<string>() {"1","2","3","5","4"}},
{ 1664005, new List<string>() {"1","2","5","4","3"}}
};
//invert the dictionary (only take first element of each list)
var dRev = d.GroupBy(kvp => kvp.Value.First(), kvp => kvp.Key)
.ToDictionary(g => g.Key, g => g.ToList());
//now you can search it many times
var x = dRev["1"]; //x is a list containing {1664004,1664005}
var y = dRev["2"]; //y is a list containing {1664003}
理想情況下dRev,只要合理可行,您就可以保留自己的;如果您要批量進行大量搜索,則重建它是有意義的。每次搜索單個專案時都沒有必要重新構建它,但也許可以考慮采用構建您現在擁有的字典的東西并將其添加到其中,以便它也構建一個反向字典,如果您要在此搜索方向經常,但一次一個專案。
如果您的搜索只在這個方向上,您的字典可能完全是錯誤的,并且維護它的東西應該重新設計以永久反轉它
uj5u.com熱心網友回復:
您需要遍歷字典的每個條目,獲取串列的第一項并將其與您要查找的內容進行比較,如下所示:
var search = 1;
var dictionary = // your dictionary
var output = new List<int>();
foreach (var kvp in dictionary)
{
if (kvp.Value.First() == search)
output.Add(kvp.Key);
}
Console.WriteLine($"The following tasks have the value {search} in the dictionary:");
foreach (var result in output)
Console.WriteLine(result);
PS 您可能想重新考慮您的資料結構,因為這似乎是對字典的誤用
uj5u.com熱心網友回復:
Dictionary<int, List<string>> taskList = new Dictionary<int, List<string>>();
List<string> list1 = new List<string>() { "2", "5", "1", "4", "3" };
List<string> list2 = new List<string>() { "1", "2", "3", "5", "4" };
List<string> list3 = new List<string>() { "1", "2", "5", "4", "3" };
taskList.Add(1664003, list1);
taskList.Add(1664004, list2);
taskList.Add(1664005, list3);
string search = "1";
var result = new List<int>();
foreach (var kvp in taskList)
{
if (kvp.Value[0] == search)
result.Add(kvp.Key);
}
Console.WriteLine($"Output: {string.Join(", ", result)}");
輸出:
Output: 1664004, 1664005
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/360509.html
