如何命名字符串组中的项目
本文关键字:项目 何命名 字符串 | 更新日期: 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并使用列名。