如何将String []转换为IDictionary <String,String>?

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)


Cod*_*aos 8

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)


Jus*_*ner 6

在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)