我需要使用C#将自定义字符串拆分为以下格式。
以下字符串:AD=Demo,OU=WEB,OU=IT,L=MyCity,C=MyCountry
,我想将它以逗号分割为
列表与LT; CustomDictionary> myList = new 列表与LT; CustomDictionary>();
根据上面和分割后的文字, 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 是实际的字符串......
答案 0 :(得分: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]);
要处理重复的密钥,您可以将对象存储在Lookup中。只需致电ToLookup
而不是ToDictionaty
。
答案 1 :(得分: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来完成。
答案 2 :(得分:1)
第二次拆分后,从该数组中的项目创建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]);
答案 3 :(得分:1)
由于您有OU
个帖子,因此无法使用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);
答案 4 :(得分:0)
MyString.split(',');
以及每个字符串上的内容如何:
CO.key = SubString.split('=')[0];
CO.value = SubString.split('=')[1];
答案 5 :(得分: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();
答案 6 :(得分: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();