0

C#を使用してカスタム文字列を次の形式に分割する必要があります。

次の文字列:AD=Demo,OU=WEB,OU=IT,L=MyCity,C=MyCountry、カンマで分割したい

List <CustomDictionary> myList = new List <CustomDictionary>();

上記および分割後のテキストに基づいて、myListリストにはCustomDictionaryタイプの5つのオブジェクトが含まれている必要があります。

 object1.Key = AD
 object1.Value = Demo

 object2.Key = OU
 object2.Value = WEB

 object3.Key = OU
 object3.Value = IT

 object4.Key = L
 object4.Value = MyCity

 object5.Key = C
 object5.Value = MyCountry

これがCustomObjectクラスです

 public class CustomDictionary
 {
     public string Key { get; set; }
     public string Value { get; set; }

     public CustomDictionary(string key, string value)
     {
         this.Key = key;
         this.Value = value;
     }
 }

これまで私はこれを試しました:

ここで私は立ち往生しています!

  List<CustomDictionary> keyVal = new List<CustomDictionary>val.Split(',').Select(x=>x.Split('=')).Select(x=>x.));

ここで、valは実際の文字列です..。

4

7 に答える 7

5

linqを使用する場合:

var query = from x in str.Split(',')
            let p = x.Split('=')
            select new CustomDictionary(p[0], p[1]);

var list = query.ToList();

また、結果として辞書を取得したいようです。もしそうなら、このコードを試してください:

var dict = str.Split(',').Select(x => x.Split('='))
                         .ToDictionary(x => x[0], x => x[1]);

重複するキーを処理するために、ルックアップにオブジェクトを保存できます。ToLookupの代わりに呼び出すだけですToDictionaty

于 2013-01-12T17:53:34.163 に答える
2

2回目に分割した後CustomDictionary、その配列内のアイテムからを作成し、を使用ToListして結果のリストを作成します。

List<CustomDictionary> keyVal =
  val.Split(',')
  .Select(x => x.Split('='))
  .Select(a => new CustomDictionary(a[0], a[1]))
  .ToList();

フレームワークには、キーと値を持つクラスがすでに存在し、代わりに使用できます。

List<KeyValuePair<string, string>> keyVal =
  val.Split(',')
  .Select(x => x.Split('='))
  .Select(a => new KeyValuePair<string, string>(a[0], a[1]))
  .ToList();

Dictionary<string, string>キーと値のペアのリストの代わりに使用することもできます。キーのハッシュコードに基づいて値を格納するため、キーごとに値を取得する方が、リストを調べるよりもはるかに高速です(ただし、アイテムの順序は保持されません)。

Dictionary<string, string> keyVal =
  val.Split(',')
  .Select(x => x.Split('='))
  .ToDictionary(a => a[0], a => a[1]);
于 2013-01-12T18:01:09.687 に答える
1

これはあなたがそれをする方法です:

var parts = theString.Split(',');

var myList = new List<CustomDictionary>();
foreach(string part in parts)
{
  var kvp = part.Split('=');
  myList.Add(new CustomDictionary(kvp[0], kvp[1]));
}

これは、LINQを使用して実行することもできます。

于 2013-01-12T17:50:29.640 に答える
1

2OU秒あるので使えませんDictionary。代わりに使用するLookup

string input = "AD=Demo,OU=WEB,OU=IT,L=MyCity,C=MyCountry";

var dict = Regex.Matches(input, @"(\w+)=([^,$]+)").Cast<Match>()
            .ToLookup(m => m.Groups[1].Value, m => m.Groups[2].Value);
于 2013-01-12T18:03:09.503 に答える
0

MyString.split(',');取得する各文字列についてはどうでしょうか。

CO.key = SubString.split('=')[0];
CO.value = SubString.split('=')[1];
于 2013-01-12T17:52:41.353 に答える
0

LINQの場合:

List<CustomDictionary> myList = (from x in input.Split(new char[] { ',' })
                                 select
                                 new CustomDictionary (x.Substring(0, x.IndexOf('=')), x.Substring(x.IndexOf('=') + 1))
                                ).ToList();
于 2013-01-12T17:56:50.323 に答える
0
string str = "AD=Demo,OU=WEB,OU=IT,L=MyCity,C=MyCountry";

var result = str.Split(',').Select(s =>
{
    var tmp = s.Split('=');
    return new CustomDictionary(tmp[0], tmp[1]);
}).ToList();
于 2013-01-12T18:08:58.617 に答える