当前位置: 首页 > 面试题库 >

有没有建议的方法来定义切片集合的常见行为?

云洋
2023-03-14
问题内容

我正在努力寻求社区的建议,以制定最佳实践。请以以下示例与我联系:

假设您的工作 间隔开放时间的一半 ,即 开始时就知道的东西。

例如

  • 可以HalfOpenInterval限制一天。示例:您说“从下午1:00开始”(直到一天结束)。我们称之为 ClockInterval
  • 可以HalfOpenInterval局限于宇宙的存在。示例:您说“从1810年7月9日起,我们宣布独立。”(假设直到宇宙末日。)我们称之为 时期

对于这两种类型的实体:你与他们的集合,所以你通常slices时钟时间 在你的代码。

所以,现在问题来了: 你必须找到一个给定的时间间隔封闭func FindEnclosingHalfOpenInterval)用于 这两个
时钟和时间,于是你开始写代码…

好吧,我开始讨论这件事……我应该如何组织代码以便只编写一次通用函数。(func FindEnclosingHalfOpenInterval)。

所以我进入了这段代码:https :
//play.golang.org/p/Cy7fFaFzYJR

但是我一直在想是否有更好的方法来定义切片集合的常见行为。

请读者,您将意识到我需要对每种切片类型进行“逐元素” 转换
(并且对于每种我定义的具体HalfOpenInterval类型,我都有一种切片类型)。因此,我想知道是否有任何方法可以让我引入新的类型而HalfOpenInterval无需进行一些调整,并且“自动”获得使用func FindEnclosingHalfOpenInterval?的能力。也许我基于Rich-oo-
java的想法不是解决简单直接进入世界中问题的正确方法。我全都听到,有任何建议。


问题答案:

这里的关键问题是您需要将切片从一种类型转换为另一种类型。

转换切片

正确的方法是创建一个新的切片并在其上循环以转换每个项目。如果您事先创建了数组,则可以更快地执行此操作:

func ToIntervalsFromClockIntervals(clockIntervals []ClockInterval) HalfOpenIntervals {
    intervals := make(HalfOpenIntervals, 0, len(clockIntervals))
    for _, clockInterval := range clockIntervals {
        intervals = append(intervals, clockInterval)
    }
    return intervals
}

组成

除了这种组合之外,您还可以解决GetEnclosingInterval只编写一次函数的问题。我并不是说它更好:它还有其他优点和缺点。合适的方法取决于您在此处发布的内容之外还使用切片的方式。

这是我的重构建议(并已修正):https :
//play.golang.org/p/Ko43hJUMpyT(TehSṕhinX,您忘了使用而不是(或名称是)来创建
可变方法baseIntervals.add``pointer recievers``value recievers``non-pointer recievers

HalfOpenIntervals不存在了。取而代之的是,您有两种不同的类型CLockIntervalsPeriodIntervals并且都具有GetEnclosingInterval通过通用基本结构实现的排序和功能。

为了方便起见,我为每个函数添加了Add一个New...函数。这就是缺点所在:由于CLockIntervals(和PeriodIntervals)不再是一个切片,而是一个结构,您将需要方便的功能来从外部处理内部切片。

-编辑-

过度概括

我自己来自面向对象的背景,我知道不惜一切代价避免重复代码的动力。

现在,我已经全职编写了2年多的Go代码,我了解到,这并不总是go中最好的方法。这些天来,在不同类型的go中复制代码是我常做的事情。不过,不确定是否所有人都同意这一说法。



 类似资料:
  • 问题内容: 似乎有很多方法可以在Python中定义单例。关于堆栈溢出是否有共识? 问题答案: 我没有真正的需要,因为具有功能(而不是类)的模块可以很好地用作单例。它的所有变量都将绑定到模块,该模块无论如何都无法重复实例化。 如果您确实希望使用类,则无法在Python中创建私有类或私有构造函数,因此,您只能通过使用API​​的约定来保护自己免受多重实例化。我仍然将方法放在模块中,并将模块视为单例。

  • 在我的应用程序中,有几个组件将生成各种不同类型的特定于应用程序的事件。这些事件将发布到代理并传递给N个客户端。其中一些客户端是我的服务器端应用程序中的其他Java类,但主要消费者是我的基于javascript的WebUI。 到目前为止,我目前的方法是定义一个抽象事件基类来封装一些公共字段,然后为每个事件实现一个特定的事件类。 这一直工作正常,只是现在我需要在javascript和java端维护事件

  • 当我尝试在junit测试类中加载配置文件时,在注入数据源时出现以下错误: 组织。springframework。豆。工厂NoSuchBeanDefinitionException:在组织中未定义名为“transactionManager”的bean。springframework。豆。工厂支持DefaultListableBeanFactory。位于org的getBeanDefinition(De

  • 我正在创建一个JSP. tag文件来处理这个用例: 其中,行为将是获取请求参数,转义其值以“安全”使用,并将转义值放回某个作用域(例如请求),与参数同名(尽管它可能是另一个名称)。 我有一个可以工作的实现,但我有scriptlet,因为我找不到在JSTL中使用变量名的方法。但我不是JSTL向导,所以我想看看我是否缺少语法/方法。这是正在工作的文件: (我真希望艾尔能自动逃脱。)

  • 我正在开发一个java程序,它接受输入的分数,给出输入的总数和平均值,但是我很难计算出如何获得当前输入的最高分数“我使用了大量嵌套的else-if语句,但必须有一种简单的方法来实现这一点,而不是键入100个else-if语句这是我的代码。我在else-if语句开始的地方添加了一条注释,以确定最高级别

  • 本文向大家介绍JavaScript的各种常见函数定义方法,包括了JavaScript的各种常见函数定义方法的使用技巧和注意事项,需要的朋友参考一下 本文详细讲述了JavaScript的各种常见函数定义方法,分享给大家供大家参考。具体分析如下: 首先看一下JavaScript最常见的四种函数定义: 用Function构造函数定义的函数,代码如下: 函数声明,这种方式也是最为常见的一种: 函数表达式,