遍历数组并根据对象属性创建新数组

Loop through array and creating new arrays based on object properties

我有一个包含混合用户库存对象的数组。
这些对象具有 object.name 属性。 当我遍历数组时,它已经按名称排序。 如果我们查看数组中的 obj.name ,它将具有此结构
[球,球,猴子,猴子,香肠]

  1. 我想遍历数组。

  2. 获取所有具有通用名称属性的元素并从中创建一个新数组 元素。

有什么建议吗?如果我们可以将数组命名为 object.name 属性,则会加分。 我正在使用 Kotlin。

这里是 code/thoughts 我要开始了, 如果这不可行,我们将不胜感激任何其他建议

private fun sortElements(){
        val temp = userstuff[0].name //but what if they only have 1 of these names.. doesnt work
        userstuff.forEach { element ->
            if(temp == element.name)
             we have another item with same name put in appropriate array
             else{
                  new array 
                  loop
        }

如果我对你的用例的理解正确,你应该可以这样做:

private fun sortElements(input: List<Stuff>) = input.groupBy { it.name }

这里的想法是将每个元素放入 Map 中,其中键是 name 值,值是对象的 List

举个例子,假设我有一个名为 Stuff:

data class
data class Stuff(
    val name: String,
    val otherField: Int,
)

测试数据如下所示:

val userStuff = listOf(
    Stuff("ball", 242),
    Stuff("ball", 11),
    Stuff("monkey", 848),
    Stuff("monkey", 455),
    Stuff("sausage", 836),
)

调用上面的函数会得到这样的结果(这将是一个 Map<String, Stuff>,我只是把它打印出来所以你可以看看里面有什么):

{
    ball=[
        Stuff(name=ball, otherField=242),
        Stuff(name=ball, otherField=11)
    ],
    monkey=[
        Stuff(name=monkey, otherField=848),
        Stuff(name=monkey, otherField=455)
    ],
    sausage=[
        Stuff(name=sausage, otherField=836)
    ]
}