Как преобразовать 2-й массив в объект словаря

У меня есть массив строки типа, которая похожа на это: "test1|True,test2|False,test3|False,test4|True". Это - по существу 2-й массив как так [test1] [Верный] [test2] [Ложь] [test3] [Ложь] [test4] [Верный].

Я хочу преобразовать это в a dictionary<string,bool> с помощью linq, что-то как:

Dictionary<string, bool> myResults = results.Split(",".ToCharArray).ToDictionary()

какие-либо идеи?

8
задан Webcognoscere 12 May 2010 в 09:13
поделиться

4 ответа

Сначала превратите вашу строку в правильный массив:

String sData = "test1|True,test2|False,test3|False,test4|True";
String[] sDataArray = sData.Split(',');

Затем вы можете обработать String[] в словарь:

var sDict = sDataArray.ToDictionary(
        sKey => sKey.Split('|')[0], 
        sElement => bool.Parse(sElement.Split('|')[1])
    );

Метод ToDictionary принимает 2 функции, которые извлекают ключ и данные элемента из каждого элемента исходного массива.

Здесь я извлек каждую половину путем разделения на "|" и затем использовал первую половину в качестве ключа, а вторую разобрал на bool для использования в качестве элемента.

Очевидно, что это не содержит проверки ошибок, поэтому может не сработать, если исходная строка не была разделена запятыми, или если каждый элемент не был разделен трубкой. Поэтому будьте внимательны к тому, откуда берется ваша исходная строка. Если она не будет точно соответствовать этому шаблону, она не будет работать, поэтому вам нужно будет провести некоторые тесты и проверку.

Ответ Марсело похож, но я думаю, что он немного элегантнее.

5
ответ дан 5 December 2019 в 15:20
поделиться
var d = results.Split(',')
               .Select(row => row.Split('|'))
               .ToDictionary(srow => srow[0], srow => bool.Parse(srow[1]));
8
ответ дан 5 December 2019 в 15:20
поделиться

Вы можете попробовать что-то вроде этого:

var resultsArray = results.Split(',');

var myResults = new Dictionary<string, bool>();

foreach (var str in resultsArray)
{
    var parts = str.Split('|');
    myResults.Add(parts[0], bool.Parse(parts[1]));
}
-1
ответ дан 5 December 2019 в 15:20
поделиться

Что-то вроде этого должно сработать:

var fullString = "Test,True|Test2,False";

var query = from item in fullString.Split('|')
            let splitted = item.Split(',')
            let value = bool.Parse(splitted[1])
            select new { Key = splitted[0], Value = value };

var dict = query.ToDictionary(pair => pair.Key, pair => pair.Value);
-1
ответ дан 5 December 2019 в 15:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: