有没有一种方法可以更实用地编写此代码?

电咖啡
static IEnumerable<Tuple<Double, Double>> GetGreatest(List<List<Tuple<double,double>>> lst)
{
    var tempHead = lst[0][0];
    for (int i = 1; i < lst.Count; i++)
    {
        if (i != lst.Count - 1)
        { 
            var previousHead = lst[i - 1][0];
            var currentHead = lst[i][0];

            if (previousHead.Item2 != currentHead.Item1)
            {
                yield return Tuple.Create(tempHead.Item1, previousHead.Item2);
                tempHead = currentHead;
            }
        }
        else yield return Tuple.Create(tempHead.Item1, lst[i][0].Item2);
    }
}

我正在尝试以一种更实用的方式编写此代码,以便我可以更轻松地将其集成到其他语言(例如Scala或F#)的项目中,我的问题是我一直在努力奋斗一个多小时,但似乎无法将其转换为可用的东西,至少在scala中不可用。

问题:我能否得到一些提示,以指出正确的方向?这样我就可以解开自己...

澄清:消除有关命名等方面的可能混淆

这是如何使用的:

var lst = new List<Tuple<double,double>>{
        Tuple.Create(3.22, 3.29), Tuple.Create(3.22, 4.05), Tuple.Create(3.22, 4.12),
        Tuple.Create(3.29, 4.05), Tuple.Create(3.29, 4.12),
        Tuple.Create(4.05, 4.12),

        Tuple.Create( 9.06, 9.13),Tuple.Create( 9.06, 9.20),Tuple.Create( 9.06, 9.27),
        Tuple.Create( 9.13, 9.20),Tuple.Create( 9.13, 9.27),Tuple.Create( 9.13,10.04),
        Tuple.Create( 9.20, 9.27),Tuple.Create( 9.20,10.04),Tuple.Create( 9.20,10.11),
        Tuple.Create( 9.27,10.04),Tuple.Create( 9.27,10.11),Tuple.Create( 9.27,10.18),
        Tuple.Create(10.04,10.11),Tuple.Create(10.04,10.18),Tuple.Create(10.04,10.25),
        Tuple.Create(10.11,10.18),Tuple.Create(10.11,10.25),Tuple.Create(10.11,11.01),
        Tuple.Create(10.18,10.25),Tuple.Create(10.18,11.01),Tuple.Create(10.18,11.08),
        Tuple.Create(10.25,11.01),Tuple.Create(10.25,11.08),Tuple.Create(10.25,11.15),
        Tuple.Create(11.01,11.08),Tuple.Create(11.01,11.15),Tuple.Create(11.01,11.22),
        Tuple.Create(11.08,11.15),Tuple.Create(11.08,11.22),Tuple.Create(11.08,11.29),
        Tuple.Create(11.15,11.22),Tuple.Create(11.15,11.29),Tuple.Create(11.15,12.06),
        Tuple.Create(11.22,11.29),Tuple.Create(11.22,12.06),Tuple.Create(11.22,12.13),
        Tuple.Create(11.29,12.06),Tuple.Create(11.29,12.13),Tuple.Create(11.29,12.20),
        Tuple.Create(12.06,12.13),Tuple.Create(12.06,12.20),Tuple.Create(12.06,12.27),
        Tuple.Create(12.13,12.20),Tuple.Create(12.13,12.27),
        Tuple.Create(12.20,12.27),
};

var glist = lst.GroupBy(i => i.Item1).Select(i => i.ToList()).ToList(); // creates list of lists

var greatest = GetGreatest(glist).ToList();

最终(在这种情况下)将生成2个元组(3.22, 4.12)(9.06, 12.27)

因此从某种意义上说,在Item2中获得了最大的数量

请注意,数据始终按顺序排序,因此下一项总是比前一项大,因此无需进行比较

这种混乱的目的是获取任何不重叠的数字组中的第一个和最后一个数字,因此,如果您查看上面的集合,您会发现在休息之前我有数字3.22、3.29、4.05和4.12所有它们都在元组中重叠,就意味着(3.22, 3.29)包含3.29,这是下面的元组的第一个元素

该方法的作用是返回一个元组,该元组包含每个“组”元组中的第一个和最后一个不重叠的数字

我忽略除子列表中第一项以外的所有内容的原因是,因为我可以看到Item2第一个元素的元素Item1与下一个元素相同(我已编写了列表,因此每一行都对应一个子列表,以使其变得更容易),因此,没有理由将其余列表包括在内

为什么将其余列表放在您首先要求的位置?没有我的选择...这是来自服务器的数据(的模型),它的结构如何,实际上我无能为力

程序要做的是寻找差距,打破连续性,如果它找到了一个Item2不相等的点,Item1那必须意味着我们已经在数据中发现了差距,并且我们可以安全地Item1从第一个列表和Item2最后一个列表中进行推送在缺口之前列出,并放入我们要产生的元组中,从而将所有重叠的数据减少到仅重要的起点和终点,从而消除中间的所有膨胀。

务实的

看来您的要求如下:

  1. 从每个内部元组列表中获取第一项;每个内部列表中的其余项目都可以忽略。

  2. 将这些元组分组,而上对的第二项等于下一项的第一个值

  3. 将每个组转换为一个包含第一个项目的第一个值和最后一个项目的第二个值的单个元组。

现在,我们可以创建一个方法调用来执行这些单独操作中的每一个。

static IEnumerable<Tuple<Double, Double>> GetGreatest(
    List<List<Tuple<double, double>>> list)
{
    return list.Select(inner => inner.First())
        .GroupWhile((previous, current) => previous.Item2 == current.Item1)
        .Select(group => Tuple.Create(group.First().Item1, group.Last().Item2));
}

GroupWhile 定义如下:

public static IEnumerable<IEnumerable<T>> GroupWhile<T>(
    this IEnumerable<T> source, Func<T, T, bool> predicate)
{
    using (var iterator = source.GetEnumerator())
    {
        if (!iterator.MoveNext())
            yield break;

        List<T> list = new List<T>() { iterator.Current };

        T previous = iterator.Current;

        while (iterator.MoveNext())
        {
            if (!predicate(previous, iterator.Current))
            {
                yield return list;
                list = new List<T>();
            }

            list.Add(iterator.Current);
            previous = iterator.Current;
        }
        yield return list;
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有没有一种方法可以使代码分析忽略“ InternalsVisibleTo”?

来自分类Dev

有没有一种方法可以从C ++代码添加包含目录?

来自分类Dev

有没有一种方法可以缩进Python而不会影响代码

来自分类Dev

有没有一种方法可以在原始代码中插入原始javascript?

来自分类Dev

有没有一种方法可以优化Spark sql代码?

来自分类Dev

PHP:有没有一种方法可以缩短此if / elseif / else语句?

来自分类Dev

有没有一种方法可以优化此DP程序中的空间?

来自分类Dev

有没有一种方法可以直接“装饰” Python代码块?

来自分类Dev

有没有一种方法可以使用Sass缩短此CSS?

来自分类Dev

有没有一种方法可以优化此Gremlin查询?

来自分类Dev

有没有一种方法可以优化此查询

来自分类Dev

有没有一种方法可以重用mongodb / mongose聚合代码?

来自分类Dev

有没有一种方法可以防止特定代码行合并?

来自分类Dev

有没有一种方法可以单行编写此Powershell脚本,或者可能以更简单的方式编写?

来自分类Dev

有没有一种方法可以真正测试Haskell代码的性能?

来自分类Dev

有没有一种方法可以简化此代码?Visual Basic在这里

来自分类Dev

有没有一种方法可以缩短我的SQL Server代码

来自分类Dev

有没有一种方法可以使代码分析忽略“ InternalsVisibleTo”?

来自分类Dev

在AFNetworking 2.0中,有没有一种方法可以简化这样的代码?

来自分类Dev

有没有一种方法可以加快此查询的速度?

来自分类Dev

触发Pry时,有没有一种方法可以自动执行代码?

来自分类Dev

有没有一种方法可以从代码中调用GoogleSpreadSheet插件?

来自分类Dev

Postgres:有没有一种方法可以在INSERT语句之后执行代码?

来自分类Dev

有没有一种方法可以在php中优化此mysql代码?

来自分类Dev

有没有一种方法可以加快此MySQL删除查询的速度?

来自分类Dev

有没有一种方法可以用更少的代码来简化此过程?

来自分类Dev

有没有一种方法可以在不列出参数的情况下编写此Javascript函数?

来自分类Dev

有没有一种方法可以存储此变量而无需重置

来自分类Dev

有没有一种方法可以在matlab / octave中向量化此代码段?

Related 相关文章

  1. 1

    有没有一种方法可以使代码分析忽略“ InternalsVisibleTo”?

  2. 2

    有没有一种方法可以从C ++代码添加包含目录?

  3. 3

    有没有一种方法可以缩进Python而不会影响代码

  4. 4

    有没有一种方法可以在原始代码中插入原始javascript?

  5. 5

    有没有一种方法可以优化Spark sql代码?

  6. 6

    PHP:有没有一种方法可以缩短此if / elseif / else语句?

  7. 7

    有没有一种方法可以优化此DP程序中的空间?

  8. 8

    有没有一种方法可以直接“装饰” Python代码块?

  9. 9

    有没有一种方法可以使用Sass缩短此CSS?

  10. 10

    有没有一种方法可以优化此Gremlin查询?

  11. 11

    有没有一种方法可以优化此查询

  12. 12

    有没有一种方法可以重用mongodb / mongose聚合代码?

  13. 13

    有没有一种方法可以防止特定代码行合并?

  14. 14

    有没有一种方法可以单行编写此Powershell脚本,或者可能以更简单的方式编写?

  15. 15

    有没有一种方法可以真正测试Haskell代码的性能?

  16. 16

    有没有一种方法可以简化此代码?Visual Basic在这里

  17. 17

    有没有一种方法可以缩短我的SQL Server代码

  18. 18

    有没有一种方法可以使代码分析忽略“ InternalsVisibleTo”?

  19. 19

    在AFNetworking 2.0中,有没有一种方法可以简化这样的代码?

  20. 20

    有没有一种方法可以加快此查询的速度?

  21. 21

    触发Pry时,有没有一种方法可以自动执行代码?

  22. 22

    有没有一种方法可以从代码中调用GoogleSpreadSheet插件?

  23. 23

    Postgres:有没有一种方法可以在INSERT语句之后执行代码?

  24. 24

    有没有一种方法可以在php中优化此mysql代码?

  25. 25

    有没有一种方法可以加快此MySQL删除查询的速度?

  26. 26

    有没有一种方法可以用更少的代码来简化此过程?

  27. 27

    有没有一种方法可以在不列出参数的情况下编写此Javascript函数?

  28. 28

    有没有一种方法可以存储此变量而无需重置

  29. 29

    有没有一种方法可以在matlab / octave中向量化此代码段?

热门标签

归档