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

本文关键字:创建 字典 数组 | 更新日期: 2023-09-27 18:29:16

我有一个现有的字符串数组,其中包含成对的项。我需要从现有数组创建一个字典。数组包含类似于以下的对:苹果,A,香蕉,斑秃,C。。。…

如何在字典中将水果指定为关键字,将字母指定为值?有没有一种方法可以在不重写数组值的情况下做到这一点??


既然我们已经写好了词典。。。。。我需要程序扫描水果列表,每次键Banana出现时,我都需要输出值B。有什么想法吗?

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

这里有一个非常简单的例子,一定要检查数组的边界等等。

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]);
}

对于LINQ"one-liner"爱好者:

Enumerable.Range(0, myArray.Length / 2)
          .ToDictionary(i => myArray[2*i], 
                        i => myArray[2*i+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

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

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