【发布时间】:2014-09-20 03:04:55
【问题描述】:
我有一个包含姓名和日期的二维数组:
name_date_array = [[John Doe, 8/9/14], [Jane Smith, 9/4/14], [Mary Jane, 6/5/14],
[John Doe, 5/2/14]]
(我正在重写,因为不清楚)我有两个变量:patient_name 和collection_date。我试图找到包含patient_name 和小于“collection_date”的日期的子数组的索引。这是我从 falsetru 得到的:
patient_name = browser.find_element(:xpath => ".//*[@id='dialog-modal-cancel-hl7-preview']/table/tbody/tr[2]/td[1]").text
collected_date = browser.find_element(:xpath => ".//*[@id='dialog-modal-cancel-hl7-preview']/table/tbody/tr[2]/td[4]").text
mo, da, yr = collected_date.split('/').map(&:to_i)
cd = [yr, mo, da]
name_admit_array.index { |name, date|
m, d, y = date.split('/').map(&:to_i)
dt = [y, m, d]
name == patient_name and (dt <=> cd)<0
}
这很好用,但我重写它的原因(除了为了挽回面子,因为它之前写得很糟糕)是我还有另一个问题。 collection_date 是为特定客户 (patient_name) 收集实验室样本的日期。每个子阵列包含患者姓名和入院日期。如果患者不止一次是患者,则患者可以有多个名称相同但入院日期不同的条目。
我需要找到包含paitient_name 并包含与collection_date 关联的录取日期的子数组的索引。这意味着索引的子数组需要具有患者姓名和在收集日期之前的入院日期,但如果有多个条目的入院日期在收集日期之前,则还需要最接近收集日期。我希望这是有道理的。
例如,如果收集日期是 2014 年 9 月 3 日,我需要返回子数组的索引 [John Doe, 8/9/14] 而不是 [John Doe, 5/2/14],因为第一个包含与该收集相关联的入场日期(逗留期间实验室是从他那里收集的)。显然,仅仅要求collection_date 大于录取日期dt 是不够的。
【问题讨论】:
-
您为内部“维度”提供了两个标准。外部“维度”的标准是什么?
-
您在“我想查找条目的索引”中使用复数表示您正在寻找可能不止一个条目(子数组)。但是您写道,您希望返回是单个对象
0。当匹配不止一场时会发生什么? -
您写道,标准以
patient_name和admission_date给出。这是怎么回事,为什么使用==John Doe & >8/9/14? -
只有一个条目应该返回,所以我对“条目”的使用是错误的,对此感到抱歉。当我输入 ==John Doe & >8/9/14 时,我指的是 patient_name 和 admission_date 将等于什么。正如我所说,这是我第一次尝试编程,我仍在逐行学习。
-
您的答案已被接受。要提出新问题,您应该提出新问题,而不是编辑当前问题。您可以在新问题中从此处复制或参考材料。
标签: ruby arrays indexing multidimensional-array