首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从属性构建索引

从属性构建索引
EN

Stack Overflow用户
提问于 2016-02-21 02:50:21
回答 1查看 31关注 0票数 0

我有个简单的聚会课

代码语言:javascript
复制
class Meetup {
  var title: String
  var date: String
}

以及从meetup.com获取的一个名为meetups的会议数组。

我想在字典中按日期组织这些会议:[String, [Meetup]],其中字符串是日期。

这是我的实现

代码语言:javascript
复制
func buildDateMeetupDict(meetups: [Meetup]) -> [String, [Meetup]] {

    var dateMeetupDict = [String: [Meetup]]()

    for meetup in meetups {
        for var meetupsByDay in dateMeetupDict {
            if meetupsByDay.day == meetup.day {
                meetupsByDay.meetupArray.append(meetup)
            } else {
                let newMeetupDay = [meetup.day, [meetup]]
                dateMeetupDict.append(newMeetupDay)
            }
        }
    }
    return dateMeetupDict
}

它能工作,但效率极低,感觉和看上去都一样。

如何从数组中的对象中提取属性,并根据该属性高效地构建索引?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-21 03:18:16

我会和你做的差不多。毕竟,您只在数组中循环一次。

我想你应该把算法表达得更清楚一点。你对每次聚会的选择是:

  • 如果键不存在,创建它并使其值成为一个数组,其中包含此Meetup;
  • 如果键确实存在,请将此配置追加到其值数组中。

我想我们可以很清楚地这样说:

代码语言:javascript
复制
// here's a test class
// [Note: I used `id` instead of `date`, but it's still just a string...]
class Meetup : CustomStringConvertible {
    var id: String
    var title: String
    init(id:String, title:String) {
        self.id = id; self.title = title
    }
    var description: String {
        return "\(self.id)/\(self.title)"
    }
}

// here's a test array of Meetups
let meetups : [Meetup] = [
    Meetup(id:"one", title:"Howdy"),
    Meetup(id:"two", title:"Hello"),
    Meetup(id:"two", title:"Bonjour"),
    Meetup(id:"one", title:"Namaste")
]

// and here's our actual code!
var dict = [String:[Meetup]]()
for meetup in meetups {
    let val = dict[meetup.id]
    dict[meetup.id] = val == nil ? [meetup] : val! + [meetup]
}

现在让我们来证明它是有效的:

代码语言:javascript
复制
print(dict) // ["one": [one/Howdy, one/Namaste], "two": [two/Hello, two/Bonjour]]

因此,我们最终得到了一个字典,它的键是原始的ids (您的日期),每个id的值是一个带有该id的Meetups数组。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35531738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档