gpt4 book ai didi

c# - 如何加入 2 个列表,其中一个列表包含 2 个元素?

转载 作者:行者123 更新时间:2023-11-30 12:10:06 28 4
gpt4 key购买 nike

据我所知,LINQ 和 lambda 表达式是解决我的特定问题的方法。在我的办公室,我有一个二维数组 [X 长度][2 宽度] 的 IM 日志列表,这样我就可以看到谁给谁发了 IM。但日志包含 3 位用户 ID 而不是实际姓名。

arrIMLog[x][1]

因此,日志条目可能看起来像这样 arrIMLog[0][0] = 353 和 arrIMLog[0][1] = 563 意味着用户 353 IM'ed 用户 563。然后,我有一个用户 ID 列表为此,我想通过搜索日志来了解他们向谁发送了即时消息。

lstSuspects

例如,lstSuspects(1) = 353、lstSuspects(2) = 563 等。我想创建一个新的简单列表 lstSuspectsContacted,这样我就可以找出 lstSuspects 上的每个人联系过的唯一用户 ID (# of times 并不重要,然而)。我该怎么做?

var lstSuspectsContacted = (from x in arrIMLog
join y in lstSuspects
on arrIMLog[0] or arrIMLog[1] equals lstSuspects // join criteria
select new { arrIMLog[0] or arrIMLog[1]}).ToList();

我遇到的困难是我想选择数组中的 [0] 或 [1] 元素,具体取决于 lstSuspects 和另一个元素 [1] 或 [0] 中的 arrIMLog 是否匹配].我不知道如何实现这一点。

最佳答案

这是一个可能看起来更冗长但将更具可扩展性和可读性的解决方案

您首先定义您的日志并怀疑 POCO。

    public class Log
{
/// <summary>
/// Person initiating the contact
/// </summary>
public int From { get; set; }

/// <summary>
/// Person that was contacted
/// </summary>
public int To { get; set; }
}

public class SuspectConnection
{
public int SuspectId { get; set; }

public List<int> Contacts { get; set; }
}

然后您可以使用 LINQ 轻松找到连接。

    var suspectConnections = new List<SuspectConnection>();

foreach (var suspect in suspects)
{
var connection = new SuspectConnection() { SuspectId = suspect };

connection.Contacts = logs.Where(x => x.From == suspect || x.To == suspect).Select(x => x.From == suspect ? x.To : x.From).ToList();
suspectConnections.Add(connection);
}

关于c# - 如何加入 2 个列表,其中一个列表包含 2 个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19484391/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com