我有一个包含整数和字符串的字符串,用逗号分隔。 例如:
0,Link Alive,1,Link Dead,2,Link Weak,3,Wiznet 0 Dead,4,Wiznet 1 Dead,5,Wiznets Dead
我想用这样的字符串创建一个枚举:
orientation
我正在考虑将字符串更改为char数组。之后我遍历char数组。 如果我检测到一个整数,我将其值赋给一个临时整数值。如果我检测到一个字符串,我将其值分配给一个临时字符串。在此之后,我将临时整数和字符串分配给枚举器。
唯一的问题是,我不知道如何处理逗号和等号。
有人能告诉我应该怎么做吗?
答案 0 :(得分:1)
听起来我真的应该做的就是创建一个Dictionary<string,int>
,因为除非你要生成代码,否则你不能在运行时更改枚举,它是不变的
现在看着你的字符串:
0, Link Alive,1, Link Dead,2, Link Weak,3, Wiznet 0 Dead,4, Wiznet 1 Dead,5, Wiznets Dead
看起来你有一组以逗号分隔的值。因此,在,
上拆分,然后每对值都是一个int和一个字符串。把它作为字典。
所以一个简单的方法可能看起来像这样(假设你的数据很好,即它有一个偶数个项目,而且每个奇数项目实际上都可以解析为int
):
var dict = new Dictionary<int,string>();
var cells = source.Split(',');
for (var i=0; i < cells.Length; i+=2)
{
dict[int.Parse(cells[i])] = cells[i+1].Trim(); // Note: you might want to check boundaries first!
}
或者使用Linq,你可以这样做:
string source = "0, Link Alive,1, Link Dead,2, Link Weak,3, Wiznet 0 Dead,4, Wiznet 1 Dead,5, Wiznets Dead";
var dict = source.Split(',')
.Select((v,i) => new { v, i })
.GroupBy(x => x.i/2)
.ToDictionary(x => int.Parse(x.First().v), x => x.Skip(1).First().v.Trim());
这里是fiddle。
解释我们在这里做的事情:
Split
上使用,
字符串。这给了我们一个带["0","Link Alive","1","Link Dead",...]
Select
选择每个项目及其在一对中的索引。所以现在我们有一组看起来像[{v="0",i=0},{v="Link Alive",i=1},...]
2
来对此进行分组。因为这是整数除法,所以它会截断。所以0/2 == 0
和1/2 == 0
以及2/2 == 1
和3/2 == 1
。所以我们正在分成几对值。int
并将其用作我们字典的关键字。然后我们使用第二个值作为值。这最终给了我们字典现在有了词典,如果你想查找一个值,那很简单:
var myValue = dict[2]; // myValue is now "Link Weak"
答案 1 :(得分:1)
通过枚举器我假设你的意思是你可以迭代的东西。一个&#39; enum&#39;基本上是一组命名整数。
因此,如果您有一串由逗号分隔的项目,并希望“重复”&#39;对他们来说,这可能会有所帮助:
string input = "0, Link Alive,1, Link Dead,2, Link Weak,3, Wiznet 0 Dead,4, Wiznet 1 Dead,5, Wiznets Dead"
string[] parts = input.split(new char[] {','}, StringSplitOptions.RemoveEmptyEntries);
foreach (string part in parts)
{
// do something
}