c# - 通过 key -updated 查找键值对列表的索引
问题描述
我正在创建一个键值对列表。
var myList = new List<KeyValuePair<string, int>>();
myList.Add(new KeyValuePair<string, int>("A", 1));
myList.Add(new KeyValuePair<string, int>("B", 2));
myList.Add(new KeyValuePair<string, int>("A", 1));
myList.Add(new KeyValuePair<string, int>("C", 3));
myList.Add(new KeyValuePair<string, int>("A", 5));
myList.Add(new KeyValuePair<string, int>("X", 9));
myList.Add(new KeyValuePair<string, int>("Z", 7));
我想通过键值对的键找出这个列表的索引。因此,A 的索引为 0,2 和 4,Z 的索引为 6。
要查找仅存在一次的索引,我可以执行以下操作..
int o = myList.IndexOf((from val in myList where val.Key == "Z" select val).SingleOrDefault());
但是我如何获得 val.Key == "A" 的索引。
有人建议我查看问题Get index of all matching values from list using Linq并关闭了我的问题,尽管我的问题是关于 keyvaluepair 列表和上述关于字符串列表的问题......
基于此,我尝试不成功..
var result = Enumerable.Range(0, myList.Count)
.Where(kvp => kvp.Key == "A")
.ToList();
和
var result1 = myList.Select((x, i) => new {x, i})
.Where(x => x.Key == "A")
.Select(x => x.i);
收到的错误:
编译错误:“int”不包含“Key”的定义,并且找不到接受“int”类型的第一个参数的扩展方法“Key”(您是否缺少 using 指令或程序集引用?)编译错误: “AnonymousType#1”不包含“Key”的定义,并且找不到接受“AnonymousType#1”类型的第一个参数的扩展方法“Key”(您是否缺少 using 指令或程序集引用?)
真诚地感谢人们回答问题或允许其他人回答而不是关闭它们。
解决方案
您可以通过执行以下操作来实现此目的:
public List<int> GetIndices(List<KeyValuePair<string, int>> myList, string query)
{
List<int> indices = new List<int>();
for (int i = 0; i < myList.Count; i++)
{
if (myList[i].Key == query) indices.Add(i);
}
return indices;
}
以下适用于任何类型:
public List<int> GetIndices<T, K>(List<KeyValuePair<T, K>> myList, T query)
{
List<int> indices = new List<int>();
int i = 0;
myList.ForEach((pair) => { if (pair.Key.Equals(query)) indices.Add(i); i++; });
return indices;
}
推荐阅读
- spring-boot - 如何正确配置 Kubernetes 探测计时(针对 Spring Boot 应用程序)
- python - 十进制转二进制 Python R2L 格式
- javascript - 检测到变化时角闪烁
- rpm - 在 CentOS 8 的本地存储库中安装 httpd
- mysql - 错误 1045 (28000):在终端上使用以下命令拒绝用户 'root'@'localhost'(使用密码:NO)的访问:sudo mysql、和、、mysql
- c++ - 展平到一维的优势
- graphql - Graphql 类型解析器(按 id)
- javascript - 函数正常执行但 addeventlistener 不会执行函数
- database - Spark 避免每次执行整个查询
- python - 与在 vscode 中使用 Go to Definition 和 Peek Definition 命令相关