Как вы можете изменить ";"отдельная строка в какой-то словарь? - PullRequest
1 голос
/ 08 июня 2010

У меня есть такая строка:
"Пользователь = U123, имя = Test, фамилия = Пользователь"

Я хочу получить словарь для этой строки, например:

user     "u123"  
name     "Test"  
lastname "User"

таким образом я могу легко получить доступ к данным в строке.

Я хочу сделать это на C #.

EDIT:
Это то, что я до сих пор:

public static Dictionary<string, string> ValueToDictionary(string value)
{
    Dictionary<string, string> result = null;

    result = new Dictionary<string, string>();
    string[] values = value.Split(';');

    foreach (string val in values)
    {
        string[] valueParts = val.Split('=');
        result.Add(valueParts[0], valueParts[1]);
    }

    return result;
}

Но, честно говоря, я действительно думаю, что есть лучший способ сделать это.

Ура, M.

Ответы [ 6 ]

3 голосов
/ 08 июня 2010

Вы можете использовать LINQ:

var text = "user=u123;name=Test;lastname=User";
var dictionary = (from t in text.Split( ";".ToCharArray() )
                  let pair = t.Split( "=".ToCharArray(), 2 )
                  select pair).ToDictionary( p => p[0], p => p[1] );
2 голосов
/ 08 июня 2010

Разделить строку на «;».

Выполните итерацию по каждому элементу в результирующем массиве и разделите каждый элемент по "=".

Теперь; dictionary.add (элемент [0], элемент [1]);

Надеюсь, я прояснил это достаточно.

1 голос
/ 08 июня 2010
Dictionary<string, string> d = new Dictionary<string, string>();
string s1 = "user=u123;name=Test;lastname=User";
foreach (string s2 in s1.Split(';')) 
{
    string[] split = s2.Split('=');
    d.Add(split[0], split[1]);
}
1 голос
/ 08 июня 2010
var dictionary = new Dictionary<string, string>();
var linedValue = "user=u123;name=Test;lastname=User";
var kvps = linedValue.Split(new[] { ';' }); // you may use StringSplitOptions.RemoveEmptyEntries
foreach (var kvp in kvps)
{
    var kvpSplit = kvp.Split(new[] { '=' });
    var key = kvpSplit.ElementAtOrDefault(0);
    var value = kvpSplit.ElementAtOrDefault(1);
    dictionary.Add(key, value);
    // you may check with .ContainsKey if key is already persistant
    // you may check if key and value with string.IsNullOrEmpty
}
0 голосов
/ 08 июня 2010

Я думаю, я бы сделал это так ...

String s = "user=u123;name=Test;lastname=User";
Dictionary<string,string> dict = s.ToDictionary();

Реализация ToDictonary такая же, как ваша, за исключением того, что я бы реализовал его как метод расширения . Это выглядит более естественно.

0 голосов
/ 08 июня 2010

Если вы точно знаете, что в ваших входных данных нет разделительных символов, работает следующее

string input = "user=u123;name=Test;lastname=User";
string[] fragments = input.Split(";=".ToArray());
Dictionary<string,string> result =  new Dictionary<string,string>()
for(int i=0; i<fragments.Length-1;i+=2)
  result.Add(fragments[i],fragments[i+1]);

Он может работать немного лучше, чем некоторые другие решения, так как он вызывает Split () только один раз. Обычно я бы выбрал любое другое решение, особенно если читаемость кода имеет для вас какое-либо значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...