Подтвердить что ты не робот

Самый элегантный способ преобразования строкового массива в словарь строк

Есть ли встроенная функция для преобразования строкового массива в словарь строк или вам нужно сделать цикл здесь?

4b9b3361

Ответ 1

Предполагая, что вы используете .NET 3.5, вы можете превратить любую последовательность (т.е. IEnumerable<T>) в словарь:

var dictionary = sequence.ToDictionary(item => item.Key,
                                       item => item.Value)

где Key и Value - соответствующие свойства, которые вы хотите действовать как ключ и значение. Вы можете указать только одну проекцию, которая используется для ключа, если сам элемент является значением, которое вы хотите.

Так, например, если вы хотите сопоставить верхнюю версию каждой строки с оригиналом, вы можете использовать:

var dictionary = strings.ToDictionary(x => x.ToUpper());

В вашем случае, какими должны быть ключи и значения?

Если вы действительно хотите установить набор (который вы можете проверить, чтобы увидеть, содержит ли он определенную строку, например), вы можете использовать:

var words = new HashSet<string>(listOfStrings);

Ответ 2

Вы можете использовать LINQ для этого, но на вопрос, который задает Andrew, следует сначала ответить (каковы ваши ключи и значения):

using System.Linq;

string[] myArray = new[] { "A", "B", "C" };
myArray.ToDictionary(key => key, value => value);

В результате появился такой словарь:

A -> A
B -> B
C -> C

Ответ 3

IMO. Когда мы говорим Array, мы говорим о списке значений, которые мы можем получить при вызове его индекса (value = > array [index]). Поэтому правильный словарь - это словарь с ключом индекса.

И благодаря @John Skeet, правильный способ добиться этого:

var dictionary = array
    .Select((v, i) => new {Key = i, Value = v})
    .ToDictionary(o => o.Key, o => o.Value);

Другим способом является использование метода расширения следующим образом:

public static Dictionary<int, T> ToDictionary<T>(this IEnumerable<T> array)
{
    return array
        .Select((v, i) => new {Key = i, Value = v})
        .ToDictionary(o => o.Key, o => o.Value);
}

Ответ 4

Если вам нужен словарь без значений, вам может понадобиться HashSet:

var hashset = new HashSet<string>(stringsArray);

Ответ 5

Что ты имеешь в виду?

Словарь - это хеш, где ключи сопоставляются значениям.

Каковы ваши ключи и каковы ваши значения?

foreach(var entry in myStringArray)
    myDictionary.Add(????, entry);

Ответ 6

            Dictionary<int, string> dictionaryTest = new Dictionary<int, string>();

            for (int i = 0; i < testArray.Length; i++)
            {
                dictionaryTest.Add(i, testArray[i]);
            }

            foreach (KeyValuePair<int, string> item in dictionaryTest)
            {


                Console.WriteLine("Array Position {0} and Position Value {1}",item.Key,item.Value.ToString()); 
            }

Ответ 7

Вопрос не очень понятен, но да, вы можете преобразовать строку в Dictionary если строка ограничена некоторыми символами для поддержки пары Dictionary<Key,Value>

Таким образом, если строка имеет вид a=first;b=second;c=third;d=fourth вы можете сначала разбить ее на основе ; затем on = для создания Dictionary<string,string> приведенный ниже метод расширения делает то же самое

public static Dictionary<string, string> ToDictionary(this string stringData, char propertyDelimiter = ';', char keyValueDelimiter = '=')
{
    Dictionary<string, string> keyValuePairs = new Dictionary<string, string>();
    Array.ForEach<string>(stringData.Split(propertyDelimiter), s =>
        {
            keyValuePairs.Add(s.Split(keyValueDelimiter)[0], s.Split(keyValueDelimiter)[1]);
        });

    return keyValuePairs;
}

и может использовать его как

var myDictionary = "a=first;b=second;c=third;d=fourth".ToDictionary();

так как параметр по умолчанию является ; & = для метода расширения.