从现有数组中使用C#创建字典

时间:2013-08-27 16:51:31

标签: c#

我有一个包含项目对的现有字符串数组。我需要从现有的数组创建一个字典。数组包含类似于的对: Apple,A, 香蕉,B, Cantalope,C ... ...

如何将水果作为关键字,将字母指定为字典中的值? 有没有办法在不重写数组值的情况下完成呢?


现在我们有字典..... 我需要程序来扫描关键Banana出现的水果和evey时间列表,我需要输出值B. 有什么想法吗?

4 个答案:

答案 0 :(得分:8)

这是一个非常简单的例子,请务必检查数组的界限等。

Dictionary<string, string> myDict = new Dictionary<string,string>();

//Make sure your array has an even number of values
if (myArray.Length % 2 != 0) 
    throw new Exception("Array has odd number of elements!");

foreach (int i = 0; i < myArray.Length; i+=2)
{
    myDict.Add(myArray[i], myArray[i + 1]);
}

答案 1 :(得分:2)

对于LINQ'单线'爱好者:

Enumerable.Range(0, myArray.Length / 2)
          .ToDictionary(i => myArray[2*i], 
                        i => myArray[2*i+1])

不是解决这个问题的最可读代码片段。

答案 2 :(得分:1)

使用模数运算符的一点工作将为您完成。首先,我确保数组具有偶数个元素。然后我采用每个偶数索引并将其加上下一个作为键和值。也许你会想要翻转那些(不确定你的键或值是否在数组中的第一个),但这基本上应该按原样运行。

Dictionary<string, string> kvs = new Dictionary<string, string>();

if (array.Length % 2 == 0)
{
    for (int i = 0; i < array.Length; i++)
    {
        if (i % 2 == 0)
        {
            kvs.Add(array[i], array[i+1]);
        }
    }
}
else
   // we have a problem with our array

答案 3 :(得分:0)

如果我理解正确,你需要这样的东西:

var fruits = new string[] { "Apple, A", "Banana, B", "Cantalope, C" };
var fruitDict = fruits.Select(f => f.Split(',')).ToDictionary(f => f[0].Trim(), f => f[1].Trim());
foreach (var fruit in fruitDict)
    Console.WriteLine("{0} - {1}", fruit.Key, fruit.Value);

如果我没有,它是一个顺序数组:

var fruits = new string[] { "Apple" , "A", "Banana", "B", "Cantalope", "C" };
var fruitDict = fruits
    .Select((f, i) => i % 2 == 0 ? new { Name = f, Cat = fruits[i + 1] } : null)
    .Where(f => f != null)
    .ToDictionary(f => f.Name, f => f.Cat);
foreach (var fruit in fruitDict)
    Console.WriteLine("{0} - {1}", fruit.Key, fruit.Value);