- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在构建一个涉及相当复杂的 TableView 的辅助项目。我决定从 Producthunt 的应用程序中汲取灵感,并为每个日期设置一个标题部分。 但是,唉,这个简单的实现比我想象的要难一些。作为引用,我附上了下面的照片,向您展示我正在尝试克隆的内容。这是来自 PH 的应用程序:
看到顶部有今天和昨天的标题部分,旁边有日期吗?我问过同行,他们中的一些人建议尝试 [[array]](数组中的数组)方法。通过枚举将它们划分出来并将它们放入特定的数组中,对吗?这很好,但过了一会儿,你会发现它失控了。例如,下面是我的一些代码:
enum dateCases {
case today
case yesterday
case twoDaysAgo
case threeDaysAgo
case fourDaysAgo
case fiveDaysAgo
case lastWeek
case lastMonth
case lastYear
case janurary
case feburary
case march
case april
case may
case june
case july
case augest
case september
case october
case november
case december
}
struct dateCaseController {
var todayArray = [Objects]()
var yesterdayArray = [Objects]()
var twoDaysAgoArray = [Objects]()
var threeDaysAgoArray = [Objects]()
var fourDaysAgoArray = [Objects]()
var fiveDaysAgoArray = [Objects]()
var lastWeekArray = [Objects]()
var lastMonthArray = [Objects]()
var lastYearArray = [Objects]()
var januraryArray = [Objects]()
var feburaryArray = [Objects]()
var marchArray = [Objects]()
var aprilArray = [Objects]()
var mayArray = [Objects]()
var juneArray = [Objects]()
var julyArray = [Objects]()
var augestArray = [Objects]()
var septemberArray = [Objects]()
var octoberArray = [Objects]()
var novemberArray = [Objects]()
var decemberArray = [Objects]()
}
所有对象都包含日期,我们可以使用这些日期来分析和划分数据。这个类的每个实例都有这个结构。
func anilyzeDateForDateCase(){
for object in objects {
let dateValue = (Logic for counting how many days has passed)
switch dateValue {
case 0:
print("")
case 1:
print("")
case 2:
print("")
case 3:
print("")
case 4:
print("")
case 5:
print("")
case 6:
print("")
ect.....
这将是很多 switch cases。您可以通过这种方法判断,代码会很快失控。如果我有少量类别,使用这种方法会很好,但事实并非如此。更不用说之后,我将根据部分加载表数组。我可以这样做,但我想知道这是否是解决此问题的正确方法?必须有一个更简单的解决方案。有没有人有这样的实现经验?谢谢。
最佳答案
正如您正确推断的那样,enum
不是到这里的方式。撇开其他不谈,它是将 UI 选择硬编码到您的数据结构中。
我可以按照这些建议提出一些建议吗:
import Foundation
// Define a `struct` that describes a date range.
// You may want to have convenience inits that don't just specify "days ago".
// You will create an array of these later...
struct DateRange {
var latestDaysAgo: Int
var earliestDaysAgo: Int
var description: String
// The important piece of this is that we can check if any given date
// is in `self` - we will use this later to `filter` by DateRange
func isDateInRange(_ date: Date) -> Bool {
let now = Date()
let oneDayInSeconds = 86400.0 // 60 * 60 * 24
let earliestDate = now.addingTimeInterval(Double(-self.earliestDaysAgo) * oneDayInSeconds)
let latestDate = now.addingTimeInterval(Double(-self.latestDaysAgo) * oneDayInSeconds)
return (date > earliestDate) && (date <= latestDate)
// NB - you REALLY want to do this with `Calendar` arithmetic
// but for clarity of the method, I'm just using 24 hour time differences
}
}
// Now construct your ranges. These can be extended after testing.
// They can also be overlapping.
let ranges: [DateRange] = [
DateRange(latestDaysAgo: 0, earliestDaysAgo: 1, description: "Today"),
DateRange(latestDaysAgo: 1, earliestDaysAgo: 2, description: "Yesterday"),
DateRange(latestDaysAgo: 2, earliestDaysAgo: Int.max, description: "Earlier"),
]
// This is whatever event struct you need - but they include the date
struct Event {
var date: Date
var payload: String // or whatever struct you want
}
// Create some random test data
let events: [Event] = [
Event(date: Date().addingTimeInterval(-100), payload: "abc"),
Event(date: Date().addingTimeInterval(-1000), payload: "abc"),
Event(date: Date().addingTimeInterval(-100000), payload: "abc"),
Event(date: Date().addingTimeInterval(-1000000), payload: "abc"),
]
// Now, the clever piece is combining `flatMap` & `filter` to get your sections:
let sections: [(DateRange, [Event])] = ranges.flatMap({
(dr: DateRange) in
let qualifyingEvents = events.filter({ dr.isDateInRange($0.date) })
return (dr, qualifyingEvents)
})
// Note that the order of ranges in `sections` is the same as the
// order that you chose in `ranges`.
// Check the sections are correct.
for (dr, es) in sections {
print("'\(dr.description)' has \(es.count) entries")
}
/* Output:
'Today' has 2 entries
'Yesterday' has 1 entries
'Earlier' has 1 entries
*/
您现在可以使用 sections
驱动您的 UITableViewDataSource
。例如:
override func numberOfSections(in tableView: UITableView) -> Int {
return sections.count
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return sections[section].1.count
}
override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return sections[section].0.description
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell(style: .subtitle, reuseIdentifier: "MyCellID")
let payload = sections[indexPath.section].1[indexPath.row].payload
cell.textLabel?.text = payload // or whatever...
return cell
}
关于ios - Tableviewcells 按分类进入特定的标题部分(iOS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42093446/
我正在尝试使用 Pandas 和 scikit-learn 在 Python 中执行分类。我的数据集包含文本变量、数值变量和分类变量的混合。 假设我的数据集如下所示: Project Cost
我想要一种图形化且有吸引力的方式来表示二进制数据的列总和,而不是表格格式。我似乎无法让它发挥作用,尽管有人会认为这将是一次上篮。 数据看起来像这样(我尝试创建一个可重现的示例,但无法让代码填充 0 和
我有一个简单的类别模型: class Category(models.Model): name = models.CharField(max_length=200) slug = mo
我正在开发一个知识系统,当用户进入一道菜时,该系统可以返回酒。我的想法是根据用户的输入为每个葡萄酒类别添加分数,然后显示最适合的葡萄酒类别的前 3 个。例如,如果有人输入鱼,那么知识库中的所有红葡萄酒
我目前正在研究流失问题的预测模型。 每当我尝试运行以下模型时,都会收到此错误:至少一个类级别不是有效的 R 变量名称。这将在生成类概率时导致错误,因为变量名称将转换为 X0、X1。请使用可用作有效 R
如何对栅格重新分类(子集)r1 (与 r2 具有相同的尺寸和范围)基于 r2 中的以下条件在给定的示例中。 条件: 如果网格单元格值为 r2是 >0.5 ,保留>0.5中对应的值以及紧邻0.5个值的相
我想知道在 java 中进行以下分类的最佳方法是什么。例如,我们有一个简单的应用程序,其分类如下: 空气 -----电机类型 -----------平面对象 -----非电机型 -----------
这是一个非常基本的示例。但我正在做一些数据分析,并且不断发现自己编写非常类似的 SQL 计数查询来生成概率表。 我的表被定义为值 0 表示事件未发生,而值 1 表示事件确实发生。 > sqldf(
假设我有一组护照图像。我正在开展一个项目,我必须识别每本护照上的姓名,并最终将该对象转换为文本。 对于标签(或分类(我认为是初学者))的第一部分,每本护照上都有姓名,我该怎么做? 我可以使用哪些技术/
我有这张图片: 我想做的是在花和树之间对这张图片进行分类,这样我就可以找到图片中被树木覆盖的区域,以及被那些花覆盖的区域。 我在想这可能是某种 FFT 问题,但我不确定它是如何工作的。单个花的 FFT
我的数据集有 32 个分类变量和一个数值连续变量(sales_volume) 首先,我使用单热编码 (pd.get_dummies) 将分类变量转换为二进制,现在我有 1294 列,因为每一列都有多个
我正在尝试学习一些神经网络来获得乐趣。我决定尝试从 kaggle 的数据集中对一些神奇宝贝传奇卡进行分类。我阅读了文档并遵循了机器学习掌握指南,同时阅读了媒体以尝试理解该过程。 我的问题/疑问:我尝试
我目前正在进行推文情绪分析,并且有几个关于步骤的正确顺序的问题。请假设数据已经过相应的预处理和准备。所以这就是我将如何进行: 使用 train_test_split(80:20 比例)停止测试数据集。
一些上下文:Working with text classification and big sparse matrices in R 我一直在研究 text2vec 的文本多类分类问题。包装和 ca
数据 我有以下(简化的)数据集,我们称之为 df从现在开始: species rank value 1
我一直在尝试创建一个 RNN。我总共有一个包含 1661 个单独“条目”的数据集,每个条目中有 158 个时间序列坐标。 以下是一个条目的一小部分: 0.00000000e+00 1.9260968
我有一个关于机器学习的分类和回归问题。第一个问题,以下数据集 http://it.tinypic.com/view.php?pic=oh3gj7&s=8#.VIjhRDGG_lF 我们可以说,数据集是
我用1~200个数据作为训练数据,201~220个作为测试数据格式如下:3 个类(类 1、类 2、类 3)和 20 个特征 2 1:100 2:96 3:88 4:94 5:96 6:94 7:72
我有 2 个基于多个数字特征(例如 v1….v20)的输出类别(好和差)。 如果 v1、v2、v3 和 v4 为“高”,则该类别为“差”。如果 v1、v2、v3 和 v4 为“低”,则该类别为“好”
我遇到了使用朴素贝叶斯将文档分类为各种类别问题的问题。 实际上我想知道 P(C) 或我们最初掌握的类别的先验概率会随着时间的推移而不断变化。例如,对于类(class) - [音乐、体育、新闻] 初始概
我是一名优秀的程序员,十分优秀!