如何命名字符串组中的项目?

时间:2011-07-25 20:08:52

标签: c# string

string[] strGroup=returnStr.split(',');

如果 strGroup 的每个项目都有每个项目的含义列表,如何命名?因此,当我需要使用特定项目时,我只使用strGroup["LastName"]代替strGroup[23]

7 个答案:

答案 0 :(得分:3)

像这样(疯狂的LINQ谈话,我知道)

string returnStr = "Claus,Junker,Jørgensen";

string[] keys = new string[]
{
    "FirstName",
    "MiddleName",
    "LastName"
};

Dictionary<string, string> groups = returnStr.Split(',')
         .Select((x, i) => Tuple.Create(keys[i], x))
         .ToDictionary(k => k.Item1, v => v.Item2);

// Alternative version

Dictionary<string, string> groups = returnStr.Split(',')
         .Zip(keys, (k, v) => new KeyValuePair<string, string>(k, v))
         .ToDictionary(k => k.Key, v => v.Value);

答案 1 :(得分:2)

数组没有字符串indexer,所以这是不可能的。

您需要为字符串的每个部分定义一个名称 - Split不会为您执行此操作。

可以使用具有已定义字符串indexer的结构,但您仍需要为每个项目定义密钥。

除非你在某个地方拥有每个字段的元数据,否则没有神奇的方法可以发生这个定义。例如,某些CSV解析器将使用第一行作为字段名称来生成此类集合。

答案 2 :(得分:1)

我怀疑您正在尝试使用split来读取CSV文件/流。

你可以做的是将第一行存储在一个数组中,使用split然后,在使用该文件迭代这些行时,你可以像这样引用:

string[] strGroup=returnStr.split(',');
var someThing = strGroup[GetIndex("LastName")];

并像这样定义GetIndex

public int GetIndex(string str)
{
    return Array.IndexOf<string>(headerArray, str);
}

答案 3 :(得分:1)

我看到很多字典示例,但如果您在代码中嵌入有关行格式的知识,为什么不编写一个类呢?使用构造函数将returnStr转换为属性:

class Group
{
    public string FirstName { get; private set;}
    public string LastName { get; private set;}
    [...]

    public Group(string returnStr)
    {
        string[] strGroup=returnStr.split(',');
        [...]
        this.FirstName = strGroup[22];
        this.LastName = strGroup[23];
        [...]
    }
 }

使用这种方法,您不必维护一组字符串常量。如果这是胜利取决于你的具体问题。

答案 4 :(得分:0)

我认为你需要查看字符串字典。

string[] data = returnStr.Split(',');
var map = new Dictionary<string, string>();
map["LastName"] = data[23];
map["FirstName"] = data[24]; // or whatever

现在使用地图而不是字符串数组。

string firstName = map["FirstName"];

答案 5 :(得分:0)

这就是Dictionary<TKey,TValue>类的用途。在您的情况下,您需要Dictionary<string,string>。但是,您必须先将其初始化一次,然后才能通过其名称访问项目。

答案 6 :(得分:0)

如果只有一个字符串,请使用Dictionary<string, string>数据类型。

如果有完整的拆分字符串列表,请使用DataTable并使用列名。