有人知道如何将arraylist转换为词典列表吗? 我有什么?我有一个包含大量字符串的ArrayList(列表):
foreach (string s in list)
{
Console.WriteLine(s);
}
output:
klaus
male
spain
lissy
female
england
peter
male
usa
...
我们看到有订单。第一个条目是NAME,第二个GENDER,第三个COUNTRY,然后是NAME,GENDER ......等等。
现在为了清楚起见,我想将这些属性存储在词典列表中。每个List条目应该是1个包含这3个属性的Dictionary。这是一个好主意吗?什么是最简单的方法?我只是搜索一些东西,将这个列表存储在一个更好看的集合中,以后可以轻松处理。我有这个:
List<Dictionary<string, string>> dlist = new List<Dictionary<string, string>>();
const int separate = 3;
foreach (string s in list)
{
//add list entries to dlist?
}
答案 0 :(得分:4)
不,这不是一个好主意。定义一个类。
至少是这样的:
class Person
{
public string Name { get; set; }
public string Gender { get; set; }
public string Country { get; set; }
}
更好的方法是使用针对性别的枚举,可能还有国家的类(内置或自定义)。
无论如何,要使用上面的类填充集合,您可以使用以下内容:
List<Person> result = new List<Person>();
for (int i = 0; i < list.Count; i += 3) {
result.Add(
new Person { Name = list[i], Gender = list[i+1], Country = list[i+2] });
}
请注意,此循环缺少对列表中项目计数的错误检查,这应该是三的倍数。
答案 1 :(得分:4)
enum Gender
{
Male = 0,
Female = 1
}
class Person
{
public string Name { get; set; }
public Gender Gender { get; set; }
public string Country { get; set; }
public Person(string name, Gender gender, string country)
{
this.Name = name;
this.Gender = gender;
this.Country = country;
}
}
用法:
List<Person> persons = new List<Person>();
Person person;
for (int i = 0; i < list.Count; i += 3) {
{
person = new Person(list[i], (Gender)Enum.Parse(typeof(Gender), list[i+1], true), list[i+2]);
persons.add(person);
}
答案 2 :(得分:0)
要回答标题中的问题,这可能是最简洁的转换方式:
for (int i = 0; i < list.Count; i += 3) {
dlist.Add(new Dictionary<string, string>() {
{ "name", (string)list[i] },
{ "gender", (string)list[i+1] },
{ "country", (string)list[i+2] }
});
}
(如果您从ArrayList
切换为List<string>
,则可以放弃(string)
演员。)
尽管如此,除非您出于某些技术原因确实需要字典,否则使用其他答案中建议的一种基于类的方法可以更好地解决问题。
答案 3 :(得分:0)
我建议使用一个类来封装你的条目:
class Entry
{
public String Name { get; set; }
public String Gender { get; set; }
public String Country { get; set; }
}
然后添加到Entry
s
List<Entry> elist = new List<Entry>();
for (int i = 0; i < list.Count; i += 3)
{
var ent = new Entry() { Name = list[i],
Gender = list[i+1],
Country = list[i+2]};
elist.Add(ent);
}
或者你可以使用元组:
List<Tuple<string, string, string>> tlist =
new List<Tuple<string, string, string>>();
for (int i = 0; i < list.Count; i += 3)
{
Tuple<string,string, string> ent
= new Tuple<string,string,string>(list[i], list[i+1], list[i+2]);
tlist.Add(ent);
}
答案 4 :(得分:0)
实现它的最简单方法 - 创建一个新类,用3个道具代表你列表中的某个人:
public class Someone {
public string Name { get; set; }
public string Gender { get; set; }
public string Country { get; set; }
}
而且您可以使用某些条目填写目的地列表:
List<Someone> dList = new List<Someone>();
for(int i = 0; i < list.Count; i += 3)
dList.Add(new Someone() { Name = list[i], Gender = list[i+1], Country = list[i+2] });
P.S。此代码可能包含错误,因为我无法访问安装了VS的计算机。
答案 5 :(得分:0)
您可能有一个类来保存数据:
public class Info
{
public string Name { get; set; }
public string Gender { get; set; }
public string Country { get; set; }
}
然后你可以有这样的字典
Dictionary<int, Info> infoDict = new Dictionary<int, Info>();
然后你就可以开始阅读并准备字典了。
答案 6 :(得分:0)
var listSrc = new List<string>
{
"klaus",
"male",
"spain",
"lissy",
"england",
"female",
"peter",
"usa",
"male",
};
var dlist = new List<Dictionary<string, string>>();
for (var i = 0; i < listSrc.Count; i++)
{
var captions = new List<string>
{
"Name",
"Gender",
"Country"
};
var list = listSrc.Take(3).ToList();
listSrc.RemoveRange(0, 3);
dlist.Add(list.ToDictionary(x => captions[list.IndexOf(x)], x => x));
}
答案 7 :(得分:0)
简单。您正在为包含三个名为的数据变量的类工作:
字符串名称; 字符串性别; 字符串国家/地区;
所以创建一个包含所有这三个变量的类。至于例如:
class Dictnary
{
public Dictnary(String nameFromCall, String genderFromCall, String countryFromCall)
{
this.name = nameFromCall;
this.gender = genderFromCall;
this.country = countryFromCall;
}
}