C# LINQ如何在查询后使用第一项上的where组合元组中的第二项
我尝试通过以下方式查找相关元组:C# LINQ如何在查询后使用第一项上的where组合元组中的第二项,c#,linq,C#,Linq,我尝试通过以下方式查找相关元组: obs3[i].Item2 = obs1[i].Item2 + obs2[i].Item2 但是,我不知道如何访问和使用Item2 double,相反,我只得到obs1的一个子集 我的问题越来越少。我希望这是因为我没有尝试过第一次尝试解决方案。您可以在Item1 var obs3 = from o in obs1 where obs2.Contains(o) select o; var query=来自obs1中的t1 在t1.Item1上的obs2中加入
obs3[i].Item2 = obs1[i].Item2 + obs2[i].Item2
但是,我不知道如何访问和使用Item2 double
,相反,我只得到obs1
的一个子集
我的问题越来越少。我希望这是因为我没有尝试过第一次尝试解决方案。您可以在
Item1
var obs3 = from o in obs1 where obs2.Contains(o) select o;
var query=来自obs1中的t1
在t1.Item1上的obs2中加入t2等于t2.Item1
选择Tuple.Create(t1.Item1、t1.Item2+t2.Item2);
Tuple[]obs3=query.ToArray();
您可以使用下面的两个循环(不是基于Linq的解决方案)来完成
static void Main(字符串[]args)
{
Tuple[]obs1=新的Tuple[]{新的Tuple(1,1.2),新的Tuple(2,1.5),新的Tuple(3,2.2)};
Tuple[]obs2=新的Tuple[]{新的Tuple(1,2.1),新的Tuple(2,5.1),新的Tuple(4,2.2)};
元组[]obs3=新元组[obs1.Count()];
对于(int i=0;i
我有两个元组数组。编辑一行以显示索引,这可能令人困惑。我查看了Zip,但不知道如何在第一个元组项上进行选择,也不知道如何在第二个项上进行操作如果其中一个输入数组有多个具有相同Item1
第一坐标int
值的元组,会发生什么?如果情况并非如此,可以使用一些字典
或分类字典
或分类列表
或类似工具?除非我将数据错误作为完整程序的输入,否则不会发生这种情况。真正的问题是Tuple
,其中MyType
包含char
和double
。我想我可以使用另一个具有唯一元素的有序结构。创建新数组时,您如何知道新数组obs3
不会太长?由于执行了中断,您确定obs2
不会包含具有相同Item1
的多个元组吗代码>?与新元组(x,y)相比,新元组(x,y)
更易于读写元组。创建(x,y)
@JeppeStigNielsen,这是正确的,但这是开始时的一个假设。。。
var obs3 = from o in obs1 where obs2.Contains(o) select o;
var query = from t1 in obs1
join t2 in obs2 on t1.Item1 equals t2.Item1
select Tuple.Create(t1.Item1, t1.Item2 + t2.Item2);
Tuple<int, double>[] obs3 = query.ToArray();
static void Main(string[] args)
{
Tuple<int, double>[] obs1 = new Tuple<int, double>[] { new Tuple<int, double>(1, 1.2), new Tuple<int, double>(2, 1.5), new Tuple<int, double>(3, 2.2) };
Tuple<int, double>[] obs2 = new Tuple<int, double>[] { new Tuple<int, double>(1, 2.1), new Tuple<int, double>(2, 5.1), new Tuple<int, double>(4, 2.2) }; ;
Tuple<int, double>[] obs3 = new Tuple<int, double>[obs1.Count()];
for (int i = 0; i < obs1.Count(); i++)
{
for (int j = 0; j < obs2.Count(); j++)
{
if (obs1[i].Item1 == obs2[j].Item1)
{
obs3[i] = new Tuple<int, double>(obs1[i].Item1, obs1[i].Item2 + obs2[j].Item2);
break;
}
}
}
foreach (var item in obs3)
{
Console.WriteLine(item?.Item1 + "\t" + item?.Item2);
}
Console.ReadKey();
}