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

本文关键字:项目 何命名 字符串 | 更新日期: 2023-09-27 18:03:43

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

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

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

类似这样的东西(疯狂的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);

数组没有字符串索引器,因此这是不可能的。

您需要为字符串的每个部分定义一个名称——Split不会为您定义名称。

可以使用具有已定义字符串索引器的结构,但仍需要为每个项定义键。

这个定义不会以神奇的方式出现,除非您在某个地方拥有每个字段的元数据。例如,一些CSV解析器会使用第一行作为字段名来生成这样的集合。

我看到了很多Dictionary示例,但如果您正在代码中嵌入有关行格式的知识,为什么不创建一个类呢?使用构造函数将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];
        [...]
    }
 }

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

我怀疑您试图使用split读取CSV文件/流。

您可以使用split将第一行存储在数组中,然后在迭代文件中的行时,您可以这样引用:

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

并像这样定义GetIndex

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

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

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

现在使用映射而不是字符串数组。

string firstName = map["FirstName"];

这就是Dictionary<TKey,TValue>类的作用。在您的情况下,您需要Dictionary<string,string>。但是,在您可以通过项目名称访问项目之前,您必须对其进行一次初始化。

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

当您有一个完整的拆分字符串列表时,请使用DataTable并使用列名。