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