将arraylist转换为词典列表?

时间:2012-07-24 16:04:33

标签: c# .net list

有人知道如何将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?
    }

8 个答案:

答案 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;
}
}