0

我有一个包含成对项目的现有字符串数组。我需要从该现有数组创建一个字典。数组包含类似于以下内容的对:Apple、A、Banana、B、Cantalope、C ... ...

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


现在我们已经写好了字典......我需要程序来扫描水果列表,并且每次出现关键香蕉时,我需要输出值 B。有什么想法吗?

4

4 回答 4

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]);
}
于 2013-08-27T16:55:14.530 回答
2

对于 LINQ“单线”爱好者:

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

不过,这并不是解决这个问题的最易读的代码。

于 2013-08-27T17:02:01.737 回答
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
于 2013-08-27T16:54:28.153 回答
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);
于 2013-08-27T17:06:28.253 回答