【问题标题】:Default dictionary value in SwiftSwift 中的默认字典值
【发布时间】:2019-08-17 12:09:23
【问题描述】:

我知道我可以在 swift 中使用默认字典值,但我正在努力为元组做到这一点

var freq = [Int:(Int,Int,Int)]()

我想设置一个默认值

freq[num.element, default: (0, num.offset, num.offset) ] = (7, 0, 0 )

当键不存在时,这会为每个值生成 7,0,0 的频率表。

我可以为更复杂的字典使用默认值吗?

例如,如果我们有一个数字数组 [1,2,2,3,3,3] 我们可以使用频率表来计算元素的数量

var freq = [Int:Int]()
for num in nums {
    freq[num, default: 0] += 1
}

我们要存储每个数字的初始位置,以及频率表中每个数字的最终位置,所以使用

var freq = [Int:(Int,Int,Int)]()
    for num in nums.enumerated() {
        if freq[num.element] == nil {
            freq[num.element] = (1,num.offset, num.offset)
        } else {
            freq[num.element] = (freq[num.element]!.0 + 1, freq[num.element]!.1, num.offset)
        }
    }

对于这段代码,我想使用默认值。

我正在寻找一种在包含多个值的频率列表上使用默认值的方法。与我使用元组而不是值数组无关,例如,我想了解如何将默认值与使用数组的元组一起使用。

我尝试使用上面的示例来设置默认值,但在测试时它不起作用。我查看了以前的问题、Google 搜索并查看了 Apple 的文档。

问题:如何使用字典的默认值 var freq = Int:(Int,Int,Int)

【问题讨论】:

  • 默认值((0, num.offset, num.offset))永远不会在您问题的代码中使用。换句话说:您问题中的代码可以写成freq[num.element] = (7, 0, 0)
  • 这是一个频率表。所以遍历一个String并计算每个元素的数量。无论是否使用,默认不设置。
  • 请显示计算频率的其余代码。目前,如果没有周围的上下文,我很难理解你在问什么。
  • 这里有很大的问题,因为最低要求已经明确规定了。我给出了一个扩展的例子,但经常在 Stack Overflow 上这样做会指责“家庭作业”(不是)或回答与所问问题无关的不同问题(使用一组值,而不是元组!等。 )。这完全是关于在 Swift 中使用字典的默认值。
  • 在编辑问题以包含其他信息后,更容易理解您的要求以及您想要实现的目标。

标签: swift


【解决方案1】:

这就是你要找的吗?只需使用默认值获取当前值并将其存储在一个变量中,这样会更容易。

var freq = [Int:(Int,Int,Int)]()

var nums = [1,2,2,3,3,3]
for num in nums.enumerated()
{
    let currentTuple = freq[num.element, default: (0,num.offset,num.offset)]
    freq[num.element] = (currentTuple.0 + 1, currentTuple.1,num.offset)
}
print(freq) //output: [1: (1, 0, 0), 2: (2, 1, 2), 3: (3, 3, 5)]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    • 2015-05-07
    • 1970-01-01
    • 2014-11-14
    • 2017-06-10
    • 2011-05-04
    相关资源
    最近更新 更多