从现有数组中用C#创建字典
本文关键字:创建 字典 数组 | 更新日期: 2023-09-27 18:29:16
我有一个现有的字符串数组,其中包含成对的项。我需要从现有数组创建一个字典。数组包含类似于以下的对:苹果,A,香蕉,斑秃,C。。。…
如何在字典中将水果指定为关键字,将字母指定为值?有没有一种方法可以在不重写数组值的情况下做到这一点??
既然我们已经写好了词典。。。。。我需要程序扫描水果列表,每次键Banana出现时,我都需要输出值B。有什么想法吗?
这里有一个非常简单的例子,一定要检查数组的边界等等。
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);