KeyValue Pair C # - PullRequest
       8

KeyValue Pair C #

0 голосов
/ 30 апреля 2018

Я пытаюсь понять, как работать со списком KeyValuePairs в C #. Я бы использовал словари, но они не допускают повторяющихся значений.

Также поиск, который я также не могу понять, как написать синтаксис.

Я видел другие решения, но я действительно запутался в том, как работать с

Конечно, единственный пример, который я могу найти, - это цикл 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));
    }
}

Приведенный выше код не работает. Может кто-нибудь, пожалуйста, немного помочь с синтаксисом.

Я не нашел никаких конкретных примеров в Интернете. Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Судя по вашим комментариям, действительно звучит так, как будто вам нужен словарь здесь.

Примите во внимание вашу логику, вы уже проверяете наличие дубликатов перед добавлением в список, верно? Это означает, что в вашем списке никогда не будет дубликатов. Словарь предотвращает дублирование ключей, а не дублирование значений. Таким образом, ваша логика может легко стать:

var dictionary = new Dictionary<char, int>();
foreach(char c in input)
{
    //faster than Any()
    if(!dictionary.ContainsKey(c))
    {
        dictionary.Add(c, 1);
    }
}
0 голосов
/ 30 апреля 2018

Должен сказать, ваш вопрос довольно запутанный. Я думаю вы пытаетесь добавить значения в список 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()
    });
...