【发布时间】:2014-02-21 04:11:23
【问题描述】:
我是 C# 新手。
我有以下结构。
struct Foo
{
string key;
Bar values;
}
我有两个 Foo 列表,大小相等的 L1 和 L2 都包含相同的键集。
我必须合并 L1 和 L2 中对应的 Foo 实例。
Foo Merge(Foo f1, Foo f2)
{
// merge f1 and f2.
return result.
}
我写了以下内容来实现这一点。
resultList = L1.Join(L2, f1 => f1.key, f2 => f2.key, (f1, f2) => Merge(f1, f2)
).ToList())
我的问题是我的密钥不是唯一的。我在 L1 中有 n 个元素具有相同的键(比如“key1”)(它们也出现在 L2 的某个地方)。因此,上面的连接语句为 L1 中的每个“key1”从 L2 中选择 n 个匹配条目,并且在我只想要 n 的结果中得到带有键“key1”的 n*n 个元素。 (因此,这是这些元素集的一种叉积)。
我想使用 Join 并仍然使用“key1”从 L1 中选择一个元素,并强制 Linq 使用 L2 中第一个可用的“未使用”“key1”元素。这可能吗?在这里加入是个坏主意吗?
(另外,我想保留 L1 中的键顺序。我尝试在连接之前使用这些键处理所有元素,并从 L1 和 L2 中删除这些条目。这扰乱了键的顺序,它看起来很丑)。
我正在寻找一个没有任何明确 for 循环的解决方案。
【问题讨论】:
-
第一个列表中的所有键都在第二个列表中,但顺序不同,还是更复杂?
-
就更复杂了。重复键多次出现。
-
是的,但是如果您在第一个列表中有 3 次“3”作为键,那么在第二个列表中您将有 3 次“3”作为键(但不在同一个位置)?跨度>