You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C# LINQ计算共享最多Token的好友ID对乘积?

用LINQ实现好友ID乘积计算的方案

当然可以用LINQ完美实现这个需求,甚至能把筛选和计算逻辑整合得更简洁高效。我给你两种实用方案,你可以根据场景选择:

方案1:在现有筛选结果上扩展计算

如果你已经需要保留FriendsWhoShareTheMostTokens这个集合做其他操作,直接在它上面追加乘积计算即可:

// 生成包含ID乘积的新集合
var topFriendPairsWithProduct = FriendsWhoShareTheMostTokens
    .Select(pair => new 
    {
        pair.FriendIdA,
        pair.FriendIdB,
        pair.SharedCountNumber,
        // 用long类型避免整数溢出(如果ID是int的话)
        IdProduct = (long)pair.FriendIdA * pair.FriendIdB
    })
    .ToList();

// 遍历使用示例
foreach (var pair in topFriendPairsWithProduct)
{
    // 这里可以替换成你的业务逻辑
    Console.WriteLine($"好友对 {pair.FriendIdA} & {pair.FriendIdB} | 共享Token数:{pair.SharedCountNumber} | ID乘积:{pair.IdProduct}");
}

方案2:一步整合筛选+计算(性能更优)

如果不需要单独保留筛选后的好友对集合,推荐把“找最大共享数、筛选好友对、计算乘积”三步合并成一个LINQ链式调用,减少中间集合的创建,性能更高效:

var topFriendPairsWithProduct = FriendsWithTheirSharedTokensAmount
    // 按共享Token数分组
    .GroupBy(x => x.SharedCount)
    // 按共享数从高到低排序
    .OrderByDescending(g => g.Key)
    // 取共享数最多的那一组(空集合场景可替换为FirstOrDefault()避免异常)
    .First()
    // 转换为包含乘积的对象
    .Select(x => new 
    {
        FriendIdA = x.FriendTo.FriendID,
        FriendIdB = x.FriendFor.FriendID,
        SharedCountNumber = x.SharedCount,
        IdProduct = (long)x.FriendTo.FriendID * x.FriendFor.FriendID
    })
    .ToList();

关键注意点

  • 避免整数溢出:如果你的好友ID是int类型,两个int相乘很容易超出int的范围(比如两个10万的ID相乘就是1010,远大于int的最大值231-1),所以强制转成long类型存储乘积更安全。
  • 空集合防护:如果FriendsWithTheirSharedTokensAmount可能为空,记得把First()替换成FirstOrDefault(),并添加空值判断,避免运行时抛出异常。

内容的提问来源于stack exchange,提问作者Curious-programmer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:44:45