Mar*_*R-L 3 c# linq linq-to-objects c#-4.0
如何将a转换String[]为IDictionary<String, String>?
索引0,2,4,...处的值应为键,因此索引1,3,5,...处的值应为值.
例:
new[] { "^BI", "connectORCL", "^CR", "connectCR" }
Run Code Online (Sandbox Code Playgroud)
=>
new Dictionary<String, String> {{"^BI", "connectORCL"}, {"^CR", "connectCR"}};
Run Code Online (Sandbox Code Playgroud)
R. *_*des 11
为了清晰起见,我建议使用旧的for循环.但如果你坚持LINQ查询,这应该工作:
var dictionary = Enumerable.Range(0, array.Length/2)
.ToDictionary(i => array[2*i], i => array[2*i+1])
Run Code Online (Sandbox Code Playgroud)
Dictionary<string,string> ArrayToDict(string[] arr)
{
if(arr.Length%2!=0)
throw new ArgumentException("Array doesn't contain an even number of entries");
Dictionary<string,string> dict=new Dictionary<string,string>();
for(int i=0;i<arr.Length/2;i++)
{
string key=arr[2*i];
string value=arr[2*i+1];
dict.Add(key,value);
}
return dict;
}
Run Code Online (Sandbox Code Playgroud)
在LINQ中真的没有简单的方法可以做到这一点(即使有,但它的意图当然不会很清楚).通过一个简单的循环很容易实现:
// This code assumes you can guarantee your array to always have an even number
// of elements.
var array = new[] { "^BI", "connectORCL", "^CR", "connectCR" };
var dict = new Dictionary<string, string>();
for(int i=0; i < array.Length; i+=2)
{
dict.Add(array[i], array[i+1]);
}
Run Code Online (Sandbox Code Playgroud)