C# 在一个键中合并两个数组=>;价值

C# 在一个键中合并两个数组=>;价值,c#,arrays,linq,C#,Arrays,Linq,我有两个长度相同的数组,我需要使用第一个作为键,第二个作为值 我的键是唯一的字符串,我的值是双精度的。 我有6只水豚。他们的名字将是关键,他们的重量是磅 我当前的代码: ViewBag.MeuBalaioDeCapivaras = new string[] { "Jerimúndia", "Genoveva", "Facibulana", "Carnavala",

我有两个长度相同的数组,我需要使用第一个作为
,第二个作为

我的
是唯一的
字符串
,我的
是双精度的。 我有6只水豚。他们的名字将是关键,他们的重量是磅

我当前的代码:

        ViewBag.MeuBalaioDeCapivaras = new string[]
        {
            "Jerimúndia",
            "Genoveva",
            "Facibulana",
            "Carnavala",
            "Dentinhos Dourados",
            "Creusa"
        };

        ViewBag.PesoDeCadaCapivaraDoMeuBalaioDeCapivaras = new double[]
        {
            500.0,
            400.0,
            250.0,
            12.0,
            1589.0,
            87.3
        };
这是我的数组,我作为
KeyValuePair

var keyValuePair = new KeyValuePair<string, double>(ViewBag.NomeDaCapivara, ViewBag.PesoDeCadaCapivaraDoMeuBalaioDeCapivaras);

我怎样才能做我需要的呢?

LINQ有一个鲜为人知的函数来做这件事-。该函数接受两个集合并将它们合并到单个集合中:

int[] numbers = { 1, 2, 3, 4 };
string[] words = { "one", "two", "three" };

var numbersAndWords = numbers.Zip(words, (number, word) => new KeyValuePair<string,int>(word, number);
int[]数字={1,2,3,4};
string[]words={“一”、“二”、“三”};
var numbersAndWords=numbers.Zip(words,(number,word)=>newkeyvaluepair(word,number);

您的代码可以编译,因为
ViewBag
动态的
,这意味着没有编译时检查

如果你换了

var keyValuePair = new KeyValuePair<string, double>(ViewBag.NomeDaCapivara, ViewBag.PesoDeCadaCapivaraDoMeuBalaioDeCapivaras);
var keyValuePair=新的keyValuePair(ViewBag.NomeDaCapivara,ViewBag.pesodecadacapivaradomeubaaliodecapivaras);
如果直接放入数组,则会出现预期的编译时错误:例如

var keyValuePair = new KeyValuePair<string, double>(
    new string[] { "Jerimúndia", "Genoveva", "Facibulana", "Carnavala", "Dentinhos Dourados", "Creusa" },
new double[] { 500.0, 400.0, 250.0, 12.0, 1589.0, 87.3 });
var keyValuePair=新的keyValuePair(
新字符串[]{“Jerimúndia”、“Genoveva”、“Facibulana”、“Carnavala”、“Dentinhos Dourados”、“Creusa”},
新双[{500.0,400.0,250.0,12.0,1589.0,87.3});
给出:

Compilation error (line x1, col y1): The best overloaded method match for 'System.Collections.Generic.KeyValuePair<string,double>.KeyValuePair(string, double)' has some invalid arguments
Compilation error (line x2, col y2): Argument 1: cannot convert from 'string[]' to 'string'
Compilation error (line x3, col y3): Argument 2: cannot convert from 'double[]' to 'double'
编译错误(第x1行,第y1列):与“System.Collections.Generic.KeyValuePair.KeyValuePair(string,double)”匹配的最佳重载方法具有一些无效参数
编译错误(第x2行,第y2列):参数1:无法从“字符串[]”转换为“字符串”
编译错误(第x3行,第y3列):参数2:无法从“double[]”转换为“double”
传统的、明确的方法是:

    var meuBalaioDeCapivaras = new string[]
    {
    "Jerimúndia", "Genoveva", "Facibulana", "Carnavala", "Dentinhos Dourados", "Creusa"
    };

    var pesoDeCadaCapivaraDoMeuBalaioDeCapivaras = new double[]
    {
    500.0, 400.0, 250.0, 12.0, 1589.0, 87.3
    };

    var list = new List<KeyValuePair<string, double>>();

    for (var i = 0; i < meuBalaioDeCapivaras.Length; i++)
    {
        list.Add(new KeyValuePair<string, double>(meuBalaioDeCapivaras[i], pesoDeCadaCapivaraDoMeuBalaioDeCapivaras[i]));
    }
var meuBalaioDeCapivaras=新字符串[]
{
“Jerimúndia”、“Genoveva”、“Facibulana”、“Carnavala”、“Dentinhos Dourados”、“Creusa”
};
var pesoDeCadaCapivaraDoMeuBalaioDeCapivaras=新双[]
{
500.0, 400.0, 250.0, 12.0, 1589.0, 87.3
};
var list=新列表();
对于(变量i=0;i

如和所述,如果您使用的是.NET 3.5或更高版本,您可以使用
Linq

如果未检查长度,这会导致问题吗,因为KeyValuePair的预期类型不可为空,或者是否?@BrettWeber是的,它会。您还应该检查
视图包中的类型。如果您调用
.Remove()
结果它是一个存储库,而不是一个列表?hrm..好的,这很有帮助!我使用linq尝试了类似的行为,但如果这比我的实现快,我将能够在每次更新它时避免这些陷阱。谢谢!
    var meuBalaioDeCapivaras = new string[]
    {
    "Jerimúndia", "Genoveva", "Facibulana", "Carnavala", "Dentinhos Dourados", "Creusa"
    };

    var pesoDeCadaCapivaraDoMeuBalaioDeCapivaras = new double[]
    {
    500.0, 400.0, 250.0, 12.0, 1589.0, 87.3
    };

    var list = new List<KeyValuePair<string, double>>();

    for (var i = 0; i < meuBalaioDeCapivaras.Length; i++)
    {
        list.Add(new KeyValuePair<string, double>(meuBalaioDeCapivaras[i], pesoDeCadaCapivaraDoMeuBalaioDeCapivaras[i]));
    }