将字符串拆分为自定义列表< >

本文关键字:列表 自定义 字符串 拆分 | 更新日期: 2023-09-27 17:52:11

我需要使用c#将一个自定义字符串拆分为以下格式。

下面的字符串:AD=Demo,OU=WEB,OU=IT,L=MyCity,C=MyCountry,我想把它在逗号处分割成一个

ListmyList = newList ();

根据上面和后面的文本,myList列表应该包含5个类型为CustomDictionary的对象。

 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 是实际的字符串…

将字符串拆分为自定义列表< >

With 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]);

要处理重复的键,可以在Lookup中存储对象。用ToLookup代替ToDictionaty

第二次从该数组中的项创建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]);

你应该这样做:

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]));
}

因为你有2个OU s你不能使用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);

关于MyString.split(',');和你得到的每个字符串:

CO.key = SubString.split('=')[0];
CO.value = SubString.split('=')[1];

With 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();
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();