我有一个包含项目对的现有字符串数组。我需要从现有的数组创建一个字典。数组包含类似于的对: Apple,A, 香蕉,B, Cantalope,C ... ...
如何将水果作为关键字,将字母指定为字典中的值? 有没有办法在不重写数组值的情况下完成呢?
现在我们有字典..... 我需要程序来扫描关键Banana出现的水果和evey时间列表,我需要输出值B. 有什么想法吗?
答案 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);