【问题标题】:Value of type Float has no member enumeratedFloat 类型的值没有枚举成员
【发布时间】:2016-11-06 09:28:43
【问题描述】:

我有一个数组。目标是删除前两个索引值,然后调用最大 3 个值(然后平均它们)。我的问题是回忆第二个和第三个最大值 我的方法是调用最大值,然后删除最大值并调用新数组array1,然后从这个数组中调用最大值,这应该是整体第二高/最大值。

//调用最大值

var ammendedInitialArray = initialArray.dropFirst(2)        
    var max = Float(-1.0)
    var stepmax1 = Int(-1)
    for (index, value) in ammendedInitialArray.enumerated() {
        if value > max{
            max = value
            stepmax1 = index
        }

以上作品

 ammendedInitialArray1 = ammendedInitialArray.remove(at: stepmax1)
    var max2 = Float(-1.0)
    var stepmax2 = Int(-1)
   *****for (index, value) in ammendedInitialArray1.enumerated{  *****
        if value > max{
            max2 = value
            stepmax2 = index
        }

***** 行出现错误:Float 类型的值没有枚举成员

我不是说它是一个浮点数,我希望它是一个数组。

【问题讨论】:

  • 这里有几件事让我担心:1) 不要将浮点字面量传递给浮点数,直接赋值即可:var max2: Float = -1.0。 **2) 不要在 Swift 中使用 [sentinel values](en.wikipedia.org/wiki/Sentinel_value),如 -1、"" 等。这正是可选项的用途。我建议你通读language guide

标签: arrays swift enumerate


【解决方案1】:

你可以这样完成整个操作:

例如:

var initialArray = [2,5,17,1,3,5,14,6,4,8,7,9]

var newArray = initialArray.dropFirst(2).sorted().reversed()
// ^ 17,14,9,8,7,6,5,4,3,1 
let topThreeValues = Array(newArray.prefix(3))
// ^ 17,14,9
topThreeValues.reduce(0, +)/topThreeValues.count
// ^ 13

【讨论】:

  • 我喜欢这个,原来的索引还在吗?例如 ^17,14,9 我希望它们在索引上彼此相邻。但如果他们不是,我想知道,通过打印这些值的索引
  • @LucasLister ...什么?
  • initialArray 保持不变。因此,您仍然可以找出前三个指数。例如:topThreeValues.forEach{ print(initialArray.index(of: $0)) }
  • 你为什么打电话给reversed()?您可以删除该方法调用,然后再执行:let topThreeValues = Array(newArray.suffix(3))
【解决方案2】:

remove(at:) 将从原数组中移除元素,并返回已移除的元素。不是数组。

试试:

ammendedInitialArray.remove(at: stepmax1)
var max2 = Float(-1.0)
var stepmax2 = Int(-1)
for (index, value) in ammendedInitialArray.enumerated() {
    if value > max {
        max2 = value
        stepmax2 = index
    }

【讨论】:

  • 哦。那么我如何实际删除这个数组的最大值?
  • 在您的评论的 for (index, value) 中给出错误类型'() -> EnumeratedSequence>'不符合协议'Sequence'
  • 我在enumerated 之后错过了()。我从您问题中的代码中意外复制了该错误
  • 你是冠军。不仅感谢您的修复,还感谢您的建议。
  • 说真的。使用选项。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
  • 2016-09-08
  • 2012-08-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多