键值对 C#

KeyValue Pair C#

我想知道如何在 C# 中使用 KeyValuePairs 列表。我会使用字典,但它们不允许重复值。

还有查找,我也不知道如何编写语法。

我看过其他解决方案,但我真的很困惑如何使用

当然,我能找到的唯一示例是 for 循环,我想让它更简洁一些。

List<KeyValuePair<char, int>> data = new List<KeyValuePair<char, int>>();

例如,我想在添加元素之前进行一些检查。 例如:我有一个字符数组,我想在将其添加到我的列表之前对其进行检查。谁能告诉我怎么查。

char[] inputArray = input.ToCharArray();
for(int i = 0; i < inputArray.Length ; i++)
{
    if(!data.Values.Contains(inputArray[i]))
    {
        data.Add(new KeyValuePair<char,int>(inputArray[i], 1));
    }
}

以上代码无效。有人可以帮助一下语法吗?

我没有在网上找到任何具体的例子。 任何帮助表示赞赏。

不得不说,你的问题比较混乱。我 认为 如果键不存在,你正试图将值添加到 KeyValuePair 的列表中?这似乎与您所说的不使用 Dictionary 不符,但无论如何您都可以:

List<KeyValuePair<char, int>> data = new List<KeyValuePair<char, int>>();

char[] inputArray = "my string".ToCharArray();
foreach (var t in inputArray)
{
    if (!data.Any(x => x.Key == t))
    {
        data.Add(new KeyValuePair<char, int>(t, 1));
    }
}

如果你只想从 inputArray 获取唯一值,你也可以这样做:

var myVals = inputArray.Distinct();

最后,如果你想得到字符串中每个不同字符的计数,你可以使用:

var counts = inputArray.GroupBy(x => x)
    .Select(group => new
    {
        Character = group.Key,
        Count = group.Count()
    });

根据您的评论,确实听起来您想要这里的词典。

考虑一下你的逻辑,你在添加到列表之前已经检查过重复项了吗?这意味着您的列表 绝不会 重复。字典防止你有重复的键,而不是重复的值。所以你的逻辑很容易变成:

var dictionary = new Dictionary<char, int>();
foreach(char c in input)
{
    //faster than Any()
    if(!dictionary.ContainsKey(c))
    {
        dictionary.Add(c, 1);
    }
}