说
string[] strGroup=returnStr.split(',');
如果 strGroup 的每个项目都有每个项目的含义列表,如何命名?因此,当我需要使用特定项目时,我只使用strGroup["LastName"]
代替strGroup[23]
。
答案 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并使用列名。