【问题标题】:array/list management questionon c#, total noobc#中的数组/列表管理问题,总菜鸟
【发布时间】:2016-07-10 08:15:07
【问题描述】:

在 c# 方面,我完全是菜鸟 我迁移到使用 c# 的新平台,尝试将交易规则迁移到新设计。 我需要为算法做这个

这是问题 我有键数组 a,b,c,d 我有值 set1 3,8,9,10 另一个值集2 77,89,100,76

这些值是相互关联的,(a) 的值为 3,77 等等

我需要的是,我需要使用值集 2 进行过滤,例如只有大于 80 的值(可能创建一个包含剩余行的新列表),从剩余的列表中我需要获取最高 set1 的键名价值

我用这种可能非常糟糕的方式尝试过,

Array.Sort 在一维数组值 set1 上,取 value[3] - 如果这等于 3 则(如果 value set1 >80 valuefound else 取 value[2] 并重复

你能告诉我一个更简单的方法吗,请考虑到我的经验不足,并尽可能包含更多的信息和代码

【问题讨论】:

  • 使用类并通过字典或列表等特定集合类型管理它们

标签: c# arrays arraylist


【解决方案1】:

您真的应该开始更多地了解 Linq。 C# 具有非常强大的函数式特性,您可以使用这些特性非常轻松地完成这些事情。这真的很有趣:)

基本上,这段代码只需 3 行就可以满足您的需求。

 var set1 = new[] {3, 8, 9, 10};
        var set2 = new[] {77, 89, 100, 76};

        var maxFromSet1 = set1
            .Zip(set2, (fromSet1, fromSet2) => new {FromSet1 = fromSet1, FromSet2 = fromSet2}) //Match the sets to one another
            .Where(zipped => zipped.FromSet2 > 80) // Filter by value
            .Max(zipped => zipped.FromSet1); //Gets max

【讨论】:

  • 我看到这个错误 'System.Linq.ParallelEnumerable.Max(System.Linq.ParallelQuery, System.Func)' is a 'method' ,在给定的上下文中无效
  • 我运行了代码,它可以工作了,你是否对其进行了更改?
  • @peter 我复制了整个块。但这不是视觉工作室。也许我缺少一些 using 语句,这些使用 System.Linq.ParallelEnumerable 存在;使用 System.Linq;
  • 使用系统;使用 System.Linq;此外,我建议至少安装 Visual Studio(最好使用 Resharper)进行测试。智能感知可以为您节省大量时间。
  • 我现在意识到 System.Linq.ParallelEnumerable 是错误的,但仍然说“'System.Linq.ParallelEnumerable.Max(System.Linq.ParallelQuery, System. Func)' 是一个“方法”,在给定的上下文中无效“
【解决方案2】:

另一种方法是使用Dictionary,它将键和值保存在一起,而不是将它们放在不同的数组中。

Dictionary<string, int[]> dic = new Dictionary<string, int[]>()
{
    { "a", new[] { 3, 77 } },
    { "b", new[] { 8, 89 } },
    { "c", new[] { 9, 100 } },
    { "d", new[] { 10, 76 } }
};

然后使用 LINQ,您可以轻松检索密钥

string key = dic.Where(x => x.Value[1] > 80) // Filter by second value
                .OrderByDescending(x => x.Value[0]) // Order by first value
                .First() // Get the max value
                .Key; // Get the matching key

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多