当前位置: 首页 > 知识库问答 >
问题:

如何在swift中使用map函数从数组中获取备选索引数据

隗星驰
2023-03-14
struct Product {
    let name: String
    let weight: Double
}

let productsList = [Product(name: "AAA", weight: 1),
                    Product(name: "BBB", weight: 2),
                    Product(name: "CCC", weight: 3),
                    Product(name: "DD", weight: 4),
                    Product(name: "RR", weight: 5),
                    Product(name: "EEE", weight: 6),
                    Product(name: "FGT", weight: 7),
                    Product(name: "DSF", weight: 8),
                    Product(name: "VCVX", weight: 9),
                    Product(name: "GFDHT", weight: 10)]

print(productsList.map { $0.name })

我从上面一行中获取所有产品名称,但我只想使用map从奇数索引中获取名称。有可能吗?

共有2个答案

宋宇
2023-03-14

您可以将奇数索引映射到相应的产品名称:

let oddIndexedProducts = stride(from: 1, through: productsList.count, by: 2)
    .map { productsList[$0].name }

print(oddIndexedProducts) // ["BBB", "DD", "EEE", "DSF", "GFDHT"]

另一种方法是在枚举()序列上使用compactMap:

let oddIndexedProducts = productsList.enumerated().compactMap {
    $0.offset % 2 == 1 ? $0.element.name : nil
}

根据经验:“过滤器映射=压缩映射”(“Swift 3中的flatMap”)。

梅安平
2023-03-14

这里有一种方法:

print(
    productsList
        .enumerated()
        .filter { $0.offset % 2 == 1 }
        .map { $0.element.name }
)

枚举方法将每个产品转换为一个2元组,其中包含产品及其数组中的索引(偏移)。然后过滤以仅保留具有奇数(或偶数)索引的产品。之后,您需要将2元组映射到产品名称。

 类似资料:
  • 问题内容: Swift 3支持像这样的功能吗? 如果没有,最有效的逻辑是什么? 问题答案: 您可以为数组创建自己的扩展名。 您可以这样称呼它

  • 我在while循环中有一个带有multiple=“true”属性的select option表单字段。如果选择选项应该是多选的,我们应该在名称上放一个方括号,如[]。 Ref:如何在php中获取选择框的多个选定值? 在这种情况下,我如何从每个选择框数组中获取值

  • 问题内容: 我有一个像这样的数组: 如果用户将“ Designation2”作为输入,则代码应返回。 这可能是一个非常简单的问题,但是我是Java的新手。因此,请提出一些建议。 问题答案: 您可以遍历数组中的字符串,并找到与您要查找的字符串匹配的索引。

  • 问题内容: 我有并想要一些函数,调用的结果是新数组。 问题答案: 看一眼

  • 我想得到给定某个索引的数组类型的值。数组的值是 $status=[1,2]; 我使用这些代码来获取值: $task_state=$status[1]; 但它实际上认为$status是一个字符串并返回 '[' 我知道这其实很简单,但我似乎找不到问题的答案。非常感谢。

  • 问题内容: 我在Python out1,out2,out3等中有很多函数,并且想基于传入的整数来调用它们。 是否有捷径可寻? 问题答案: tl; dr:编写函数而不是,并且不要理会此hack。 我无法想象在实际情况中会出现这个问题的合理情况。请重新考虑问题的体系结构;可能会有一个更好的方法(因为将它们存储在列表中意味着除索引外,函数没有其他意义;例如,我只能想象如果要创建该函数,则可以这样做)一堆